我不会与长轮询或什么过分复杂化此方法 - 让你的缘故开始我就假设你可以使用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