我不會與長輪詢或什麼過分複雜化此方法 - 讓你的緣故開始我就假設你可以使用setTimeout()
來每三十秒檢查一次新用戶或其他事物。與您現有的cats()
構造堅持,你可以做這樣的事情:
var cats = [];
function checkForNewCats() {
$.ajax({
url: "getcats.php",
data : { lastCat : (cats.length == 0 ? "" : cats[cats.length-1].name) }
})
.done(function(data) {
$.each(data, function(i, val) {
cats.push(new cat(val.name));
});
})
.fail(function() {
alert("Something went horribly wrong");
})
.always(function() {
setTimeout(checkForNewCats, 30000);
});
}
checkForNewCats();
使包括陣列cats
來存儲所有的對象,然後一個函數,反覆做一個Ajax請求幾次一分鐘檢查爲新的貓,並將其添加到陣列。
這假定由PHP返回的JSON是貓對象的數組類似:
[
{ "name" : "fluffy" },
{ "name" : "sneezy" },
{ "name" : "ned" }
]
很明顯,您可以爲每隻貓添加額外的屬性。據推測,你的真實世界的應用程序會有某種用戶ID,名稱和你提到的GPS位置。
的data
屬性,我對Ajax請求設置:
data : { lastCat : (cats.length == 0 ? "" : cats[cats.length-1].name) }
基本上是通過最後的貓的名字,並把它留給PHP來然後返回只因爲那一個加入貓的名字。顯然,在真實世界的應用程序中,您可以使用用戶標識或記錄時間戳來實現此目的。
編輯:老語法jQuery的阿賈克斯 -
function checkForNewCats() {
$.ajax({
url: "getcats.php",
data : { lastCat : (cats.length == 0 ? "" : cats[cats.length-1].name) },
success : function(data) {
$.each(data, function(i, val) {
cats.push(new cat(val.name));
});
setTimeout(checkForNewCats, 30000);
}
});
}
OK,這是開始變得有意義。我實現了你的代碼,但是我不斷收到錯誤,提示「Uncaught TypeError:Object#沒有方法'失敗'」它似乎不理解.success,.fail或.always方法。這些應該在$ .ajax方法中嗎? –
mkyong
2012-01-31 11:03:23
我很抱歉,我給了你一個jQuery Ajax解決方案,即使在你的問題中沒有提及jQuery,我認爲我包含在'.done()','.fail()'和'.always )'僅適用於版本1.5以上的版本 - 它使用較新的延遲對象樣式。我編輯了我的問題,以顯示它如何與舊樣式成功處理程序一起看。 (對不起,我沒有時間給出一個非jQuery的Ajax解決方案。)雖然在某處可能有語法錯誤 - 我實際上無法測試它,因爲我沒有服務器端部分解決方案... – nnnnnn 2012-01-31 11:25:44
嗯,我想出瞭如何以不同的方式實現它,但這絕對有助於我更好地理解它。謝謝你的幫助! – mkyong 2012-01-31 13:03:59