アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして。かなりレアなケースになると思うのですが、すでにリリースしており、泣き寝入りする事態が起きまして、CGIの出力のところがわからなくて困っております。

1、あるHTMLをブラウザで開くと<head>内のCGIが実行される。
<script language="JavaScript" type="text/javascript" src="○○.cgi"></script>

2、このCGIが実行されるとMySQLのデータを取得し、HTMLでデータを取り扱えるよう、取得した値をJavaScriptの配列の形式に加工され、「Temporary Internet Files」に○○.cgiが保存されます。

var 配列A=new Array();
配列A[0]="0000001,名前,住所";
配列A[1]="0000001,名前,住所"; ※○○.cgiを開くと右のような配列の表記が記載されている。

3、このHTML内で、上記の配列をJavaScriptで呼び出せば、Temporary Internet Filesに保存されたcgiファイルのデータ(配列形式の)が表示されるので、まるで外部JSの配列を扱っているかのようにDBのデータを取得することができます。

mysqlのデータを取得した後、CGIでHTMLに吐き出すぐらいはわかるのですが、
画面上に表示させるのではなく、外部JSなら普通どこかサーバにあるJSファイルを見にいくと思うのですが、Temporary Internet Filesに保存され、それが値として操作できるところです。
このCGIの出力の記述がまったくわからないので困っております。

わかりにくい文章で本当に申し訳ございません。どうかよろしくお願いします。

A 回答 (2件)

(1)PHPが動作する(2)PHPのDBモジュールをアップできる(3)jQueryでもよい


という3つの条件がクリアできればAjaxで同じことを再現することは可能だと思います。
具体的には下記のようなソースになります。
呼び出しているMySQLへのアクセス部分とテーブル内の項目を変更すれば動くはずです。

▼html(JavaScriptはbody内に書く※headに書く場合はfunction以外をonloadで記述)
<div id="search_data"></div>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
var search_msg_data;
$("#search_data").html('Now Loading...');
$.ajax({
type: "GET",
url: "hoge.php", // 呼び出すphp
success: function(msg){
search_msg_data = msg;
setTimeout('search_json()', 1000);
}
});
function search_json(){
var get_json = eval("("+search_msg_data+")");
if(get_json.results == null){
$("#search_data").html("該当するデータは見つかりませんでした。");
}
else{
var hash = get_json["results"];
var search_html = "";
for(var i in hash){
search_html = search_html + '<li><a href="#"><b>' + hash[i].name + '</b>' + hash[i].address + '</a></li>';
}
$("#search_data").html(search_html);
}
}
</script>

▼php
<?php
require_once("DB.php");
$dbUser = "ユーザー名";
$dbPass = "パスワード";
$dbUserPass = $dbUser . ":" . $dbPass;
$dbHost = "mysql.xxxxx.ne.jp";// ホスト名
$dbName = "データベース名";
$dbType = "mysql";
$dbTable = "テーブル名";
// データベース接続
$db = DB::connect("$dbType://$dbUserPass@$dbHost/$dbName");
if (DB::isError($db)){
die($db->getDebugInfo());
}
// クエリ発行
$sql = "SET NAMES utf8"; // UTF8の場合
$result = $db->query($sql);
$sql = "SELECT * FROM `$dbTable` ORDER BY name LIMIT 0 , 100";
// SQL文発行
$result = $db->query($sql);
if (DB::isError($result)) {
die ($result->getDebugInfo());
}
$i=1;
while ($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)){
// テーブルの中身がidとnameとaddressの場合
$array_data[strval($i)] = array(
"id" => $rs['id'],
"name" => $rs['name'],
"address" => $rs['address']
);
$array_data_html = "<li>{$rs['id']}:{$rs['name']}:{$rs['address']}</li>\n";
$i++;
}
$array_all = array( "results" => $array_data);
print json_encode($array_all); // JSON出力
@$result->free();
$db->disconnect();
?>
    • good
    • 0

質問が難解なので、合っているかわかりませんが。


要は「Webブラウザからローカルファイルにアクセスしたい」と理解しました。

一般的でないですが、ファイルAPIを使うとローカルファイルにアクセスできるようです。
http://ascii.jp/elem/000/000/559/559105/

この回答への補足

お忙しいところ、回答していただき誠にありがとうございます。
今回、対象のHTMLファイルは、IE6以上で正常に動作するようになっており、
Firefox(ちなみに3.6)でページを確認すると、吐き出されたCGIのデータをうまくHTMLで取り込めないようで、値の出力が真っ白になってしまいます。
ファイルAPIの対象は「Firefox 3.6 / 4β Google Chrome 6 」のようですのでごめんなさい。これだと違うようです。

補足日時:2011/07/05 10:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!