Perlのカテゴリで質問したところ(質問番号:5634620)、JavaScriptで実現
できるかもしれないとのアドバイスを頂いたので、こちらで質問します。
次のことをするcgiを作りたいのですが
1. cgiを起動したらある装置からデータを読み込んできて配列及びファイルに
書き込み、その内容を表(HTML)に表示。(即時)
2. 5秒ごとに装置に対してデータを読みに行き(ポーリング)、変化があったら
(セーブしてあるデータと読みに行ったデータに違いがあったら)表(HTML)を
リロードして新しいデータの内容を表示する。
perlのカテゴリで下記のようなアドバイスを頂きましたが、
Javascriptは全くわからず、お手上げ状態です。
>Ajaxを使えばできそうな気がします。
>setInterval(checkData,5000);
>として5秒毎に、checkData関数を呼び出します。
>checkData関数内では、Ajaxを使ってサーバーのデータを読み込み、現在の
>データと照合し、更新していれば、
>location.reload(true);
>として、リロードさせます。
実際にどの様に記述すれば実現可能か、教えていただけませんでしょうか。
よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
「Ajax」なるバズワードはどうでも良いことで、必要なのは HTTP クライアント。
if ('undefined' === typeof XMLHttpRequest)
XMLHttpRequest = (function() {
var I = arguments.length;
var i;
for (i = 0; i < I; i++) {
try {
arguments[i]();
return arguments[i];
} catch (err) { ; }
}
return null;
})(
function() { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); },
function() { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); })
var gLastModified = 'Tue, 2 Feb 2010 19:43:31 GMT';
var gClient = new XMLHttpRequest;
var gTarget = 'hoge.cgi';
doRequest();
function doRequest() {
gClient.open('GET', gTargetURI, true);
gClient.setRequestHeader('If-Modified-Since', gLastModified);
gClient.onreadystatechange = onreadystatechange;
gClient.send(null);
}
function onreadystatechange() {
if (gClient.readyState === 4 /*XMLHttpRequest.DONE*/) {
try {
switch (gClient.status) {
case 304 :
// Not Modified
break;
case 200 :
// OK
// huga(gClient);
gLastModified = gClient.getResponseHeader('Last-Modofied');
break;
default :
// others
break;
}
} catch (err) { ; }
setTimeout(doRequest, 5000);
}
}
XMLHTTP はその名の通り XML のやり取りに有用です(send() に DOM 文書を渡せば自動的に XML 直列化して POST し、サーバ応答の中身は自動的に DOM 解析される)。しかし一応は XML 以外のデータも扱え、最近では簡易 HTTP クライアントとしての側面が注目されています(いわゆる「Ajax」)。WebSocket や WebWorker が出てくれば、それらと組み合わせてもう少し複雑なやり取りができるようになるでしょう(何と呼ぶようになるのかは分かりませんが)。
No.2
- 回答日時:
ごみ投下。
叩かれ台です。全角空白は半角に。非同期じゃない時点でAjaxじゃないのか?!
そして、これでいいのか?などなど、どなたか教えて~!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title></title>
<body>
<div id="tb"></div>
<script type="text/javascript">
//@cc_on
function getFile( file ) {
var data = null, req;
/*@ try { req = new ActiveXObject( 'Msxml2.XMLHTTP.6.0' ); } catch( e1 ) {
try { req = new ActiveXObject( 'Msxml2.XMLHTTP.3.0' ); } catch( e2 ) { @*/
try { req = new XMLHttpRequest; } catch( e3 ) { return null; } /*@ } } @*/
if( req ) {
req.open( 'GET', file, false );
req.send( '' );
data = 200 == req.status ? req.responseText: 'Error';
req = null;
}
return data;
}
function createHTMLTable( data ) {
var html = [ '<table border="1">' ];
var cnt = 0;
var rows = data.split( /\r\n|\r|\n/g );
var tmp, cells;
while( tmp = rows[ cnt++ ] ) {
cells = tmp.split( /\t|,|\s/g );
html.push( '<tr><td>' + cells.join( '<td>' ) );
}
return html.join( '' ) + '</table>';
}
function updateTable( target, fileName, intervalTime ) {
var e = document.getElementById( target );
var b;
var f = function ( ) {
var data = getFile( fileName );
if( b != data )
e.innerHTML = createHTMLTable( h = data );
};
f();
setInterval( f, intervalTime );
}
updateTable( 'tb', 'test7.html', 5000 );
</script>
No.1
- 回答日時:
ご質問の件は既に回答のあるようにajaxで処理することになりそうです。
ただ、今回の質問内容を見る限り、「ajaxってなんですか?」の
レベルの質問ですので、一度ajaxについて理解を深めてから
再度質問をすることをお勧めします。
ajaxとは・・・を語りだせば本の2~3冊は書ける内容になるので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- Excel(エクセル) VBA : スクレイピングできない 4 2023/05/12 22:26
- Excel(エクセル) [Excel2016] 相関表等の自動作成 2 2022/08/01 20:34
- ドライブ・ストレージ SSDを追加したら昔のHDDがおかしくなった 4 2023/03/23 13:25
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
計算式を教えてください。
-
JavaScriptで決まった「時刻」...
-
C#OpenCv V4にのエラーに関する...
-
GASでundefinedエラーが出ます
-
jqGridについて
-
メールフォームの日付入力フォ...
-
商品コードを入力で、商品名、...
-
var exports = exports || {}; ...
-
【西暦等の変換】
-
JsでDateオブジェクトの年月日...
-
変数と文字列からオブジェクト...
-
javaScript textareaの一行あた...
-
なぜmatchメソッドがエラーにな...
-
時間帯によってデスクトップ背...
-
パス付きサイトのjavascript解析
-
1日1回だけ引けるjavascriptお...
-
googleスプレッドシートのApps ...
-
アルファベットABCD…をスマート...
-
javaScriptのコードの修正をお...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
javaScriptのコードの修正をお...
-
ジェネレーターの作り方
-
翌月を取得するGASが分かりません
-
ASP.NETのコントロールの値をJa...
-
GASでundefinedエラーが出ます
-
C#で、ContextMenuStripに動的...
-
GASでGoogleフォームの自動返信...
-
ASP.NET MVCでObjectをjsに渡す
-
VSCODE[Python]の設定について
-
C# 演算 奇数と偶数 表現の仕方
-
javascriptでiframeのURL変更は?
-
イベントが初めの一回しか起き...
-
なぜmatchメソッドがエラーにな...
-
gas スプレッドシートがアクテ...
-
jqGridについて
-
var exports = exports || {}; ...
-
JavaScriptで文字列の特定文字...
-
javascriptでテーブルに追加し...
おすすめ情報