
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptで複数キーワード検...
-
C#で、ContextMenuStripに動的...
-
JavaScriptで日付を取得したいです
-
C#OpenCv V4にのエラーに関する...
-
IEでF12を押さないとjavascriptが…
-
ジェネレーターの作り方
-
【javascript】正規表現で括弧...
-
google apps scriptの終了のさせ方
-
ジャバスプリクトについて
-
idを使わずにonclickで自身の要...
-
jspからjavascriptの変数引継ぎ
-
「nullまたはオブジェクトでは...
-
Linux バイナリ実行できない "...
-
window.openでタイトル名の指定
-
VBAでIEのボタンを押してメッセ...
-
HTML:Tableタグに対し、JavaScr...
-
ActiveXobjectが作成できない
-
Boolean型配列中のTrueの有無を...
-
JavaScriptとHTMLの課題です
-
Latexに関する質問です。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#OpenCv V4にのエラーに関する...
-
C#で、ContextMenuStripに動的...
-
食材の期限を管理するためにGAS...
-
javaScriptのコードの修正をお...
-
メールフォームの日付入力フォ...
-
GASでundefinedエラーが出ます
-
var exports = exports || {}; ...
-
google apps scriptの終了のさせ方
-
JavaScriptでテーブル内?に矢...
-
ジェネレーターの作り方
-
HTMLで作った時報アプリが動き...
-
gas スプレッドシートがアクテ...
-
ASP.NET MVCでObjectをjsに渡す
-
setTimeoutによる繰り返しが途...
-
イラレでナンバリングする方法
-
定積分の近似値を計算する関数c...
-
pdfに丸秘などのスタンプを...
-
【JavaScript】数当てゲームを...
-
シンプルなweb版スタンプラリー...
-
翌月を取得するGASが分かりません
おすすめ情報