- 締切済み
HTMLの外部jsのようなcgiファイルについて
はじめまして。かなりレアなケースになると思うのですが、すでにリリースしており、泣き寝入りする事態が起きまして、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の出力の記述がまったくわからないので困っております。 わかりにくい文章で本当に申し訳ございません。どうかよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kuzumiHK
- ベストアンサー率72% (132/183)
(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(); ?>
- _--_1l1_1_
- ベストアンサー率67% (102/152)
質問が難解なので、合っているかわかりませんが。 要は「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 」のようですのでごめんなさい。これだと違うようです。