Comet programming幾乎爲任何Web開發人員所知,而jQuery是目前市場上最流行的JavaScript庫。對?如何在jQuery中掛鉤到服務器更新(comet ajax)?
現在,假設服務器上有一項服務器每秒向客戶端推送數據。基於C#語言的服務器代碼的ASP.NET實現可能是這樣的:
while (true)
{
Response.Write("{data: 'data from server'}");
Response.Flush();
Thread.Sleep(1000);
}
也可以設想頁面加載到瀏覽器後,一個jQuery片段觸發與服務器保持活動狀態的HTTP連接阿賈克斯,上哪個服務器將這些數據片段發送回客戶端。
到目前爲止,這並不是一個問題,因爲小孩開發者也可以這樣做。但是,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中收到通知最新信息是輪詢底層xhr
對象的responseText
,並定期檢查它的服務器發送的最新數據。但是,我正在尋找一種基於事件的方法來掛鉤活動的ajax連接,並在服務器發送任何東西時收到通知。
我的問題是,我應該如何檢測到服務器上有東西?有沒有包括setTimeout
或setInterval
? jQuery有什麼可以幫助我們嗎?
我需要將它作爲* * pushlet *(http://en.wikipedia.org/wiki/Push_technology#Pushlet)實現,而不是作爲* long-polled *連續的請求。 –