Comet プログラミングは Web 開発者にはほとんど知られており、jQuery は現在市場で最も人気のある JavaScript ライブラリです。右?
ここで、毎秒クライアントにデータをプッシュするサービスがサーバー上にあるとします。C# 言語に基づくサーバー コードの ASP.NET 実装は、次のようになります。
while (true)
{
Response.Write("{data: 'data from server'}");
Response.Flush();
Thread.Sleep(1000);
}
また、ページがブラウザーにロードされた後、jQuery スニペットがサーバーとのキープアライブ HTTP ajax 接続をトリガーし、サーバーがそれらのデータ スニペットをクライアントに送り返すことを想像してみてください。
ここまでは子供の開発者でもできるので全く問題ありません。ただし、jQuery AJAX には、さまざまな機会にトリガーされる多くのコールバック関数があります。success
、error
、complete
など。ただし、これらのメソッドはいずれも、サーバーから送信された JSON ごとに起動されません。つまり、このコードは機能しません:
$(function () {
$.ajax({
type: 'GET',
url: 'url-of-that-service',
dataType: 'json',
success: function (result) {
/*
Here, I need to get the result sent by
the Server, and based on its data,
manipulate DOM. For example, imagine
that server sends its current time
in JSON format each second. I need
to parse the sent JSON string, and
append the server time somewhere in
the web page.
Success function never gets fired for
these server-pushed data.
What should I do?
*/
},
error: function (error) { }
});
});
jQuery で最新の更新について通知を受ける 1 つの方法responseText
は、基礎となるxhr
オブジェクトをポーリングし、サーバーから送信された最新のデータを定期的にチェックすることです。ただし、イベントベースのアプローチを探して、生きている ajax 接続にフックし、サーバーが何かを送信するたびに通知を受け取ります。
私の質問は、何かがサーバーから到着したことをどのように検出すればよいですか? orを含まないきちんとした方法はありますsetTimeout
かsetInterval
? jQuery はここで私たちを助ける何かを持っていますか?