締切済み

JavaScript Ajax テキストの更新時間

  • 困ってます
  • 質問No.9408035
  • 閲覧数128
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 66% (4/6)

var reload = "";
var reload = function() {
 \$.ajax({
  url: 'test.cgi',
  type : 'get',
  dataType: 'text',
   success: function(data) {
    \$('#text').html(data);
    return false;
   },
   error: function(data) {
    //alert('読込に失敗しました…');
   }
 });
 setTimeout("reload()", 3000);
}
現在3秒毎に更新としているのですが、
これを「log/log.txt」
の更新時間で、test.cgiを
リロードさせるようにするには、
どうすればいいでしょうか?

できればソースで教えて頂けるとありがたいです。
どうかよろしくお願いいたしますm(_ _)m

回答 (全3件)

  • 回答No.3

ベストアンサー率 66% (380/572)

すいません。タイプミスしてました、comentじゃなくてcomet でした (恥ずっ)

> このサイトのソースでできるのでしょうか?

提示されたサイトのサーバー側のソースは、Javaですが、
多分 いまのtest.cgiって perlですよね?
なので、このサイトのソースをそのまま使っても動くはずはありません。

perlで これを実装したくて、検索されるのなら、
cometで探すとJavaのものがほとんどなので、
ロングポーリング で探したよいかと思います。
ただし、その場合でも、見つけたソースを丸写したって
そのままでは自分のシステムでは動かないので
アルゴリズムを参考にするだけで、実装は自身自身で行う必要があります。
(なので、失礼ながら 読んでも分からないようなら、
 ”ゲップ”対策だけ行ったほうがよいと思います)
  • 回答No.2

ベストアンサー率 66% (380/572)

$.ajaxだけでは、 log/log.txtが更新された時点で、サーバーからブラウザに対して
通知する方法がありませんので、現状のように、定期的(?秒おき)に
ポーリングして、log.txtが更新されていないかをブラウザ側から確認してやるしかありません。

(1)
画面が「ゲップ」されるのが見苦しいだけなら、定期ポーリングするのはそのままで
$.ajaxのsuccess: function内の
~.htmll(data);の部分を 現在表示中の内容とajaxが入手したdataを比較して、
更新されたとときだけ再作画するように条件分岐を入れるとよいでしょう。

理想を言えば、現在表示中の内容に対して増減した部分のみJavaScriptで
削除・挿入するようにすると更新時の表示がスムーズになります。
(htmlへの挿入時にアイテムごとにエレメントを分けておいたり、
 test.cgiでアイテムの区別がつくようIDを付けて戻すとか、
 表示中の最終時刻と比較して、変更アイテムのみ送るようにして通信量を下げる等の
 工夫は必要ですが)

(2)
サーバー負荷や通信トラフィックを削減したいのなら
(案1)test.cgi側で ロングポーリング手法を行う (またはcomentの実装)
 つまり、log/log.txtが更新されてなければ、test.cgiはすぐに応答しないで
 タイムアウトしない程度まで応答を保留する。

(案2)WebSocketを使う 
  ただしサーバーやブラウザに対応が必要
お礼コメント
MarunageGomen3

お礼率 66% (4/6)

御回答ありがとうございます。

>>(2)
サーバー負荷や通信トラフィックを削減したい

理想では、これなのですが、comentの使いかたがよくわからない・・・
https://thinkit.co.jp/story/2011/03/08/2040
このサイトのソースでできるのでしょうか?

質問ソースができるまでは、comentやらwebsocketを調べていたのですが、試し実装すらできなくて、断念してしまっていました。
投稿日時 - 2017-12-15 13:24:52
  • 回答No.1

ベストアンサー率 38% (2999/7784)

コンピューター カテゴリマスター
サーバ内で起きている事はブラウザ側で知る術がありません。

やるとしたら log.txt の更新時間を教えてくれる CGI を別途用意して、それをAjax で定期的にチェックして、更新時間が変わっていたら test.cgi を見に行く Ajax を呼ぶと言う二度手間になります。
お礼コメント
MarunageGomen3

お礼率 66% (4/6)

御回答ありがとうございます

ページに入った時、(更新時間:2017/12/14)

↓ 質問と同じソースで、更新時間を知らせるCGIを都度走らせる

ページ閲覧中(更新時間時間:2017/12/15)

↓ 変更されれば更新

以下同様
ということでしょうか?


2度手間となりますが、
現在ですと、画面がちらついたりする瞬間があります。
(更新されていなくても)
回答者様が、ご提案くださったようにすれば、
更新のときだけでちらつきは済みそうですが
どうでしょう・・・?

上記質問ソースと、CGIでテキストの更新時間で左右させるやり方で
サーバー様への負担は、どちらのほうが大きいでしょうか?
もしくは、どちらも大きいですか?
投稿日時 - 2017-12-15 13:12:48
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ