以下是我要做的。我试图从数据库中提取数据,创建一个新用户,并继续每秒检查新用户和以前用户位置的变化(我使用Android应用程序跟踪GPS)。每次向数据库中添加新用户时,我都需要能够创建一个新实例,但我不知道如何做到这一点。我看到了下面这样的例子,但对象是在程序中定义的,不是"自动"创建的
function cat(name) {
this.name = name;
this.talk = function() {
alert( this.name + " say meeow!" )
}
}
cat1 = new cat("felix")
cat1.talk() //alerts "felix says meeow!"
cat2 = new cat("ginger")
cat2.talk() //alerts "ginger says meeow!"
比方说,我想从数据库中提取猫的名字,并每秒检查一次新的名字。我会有一个php程序,将其作为JSON提取并返回给这个JS程序,但我如何使用函数实例化一个新的"cat"?如有任何帮助,我们将不胜感激。谢谢
我不会用长轮询或任何事情来过度复杂化这一点——为了让您开始,我只假设您可以使用setTimeout()
每隔30秒左右检查一次新用户。坚持使用现有的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是一个cat对象数组,类似于:
[
{ "name" : "fluffy" },
{ "name" : "sneezy" },
{ "name" : "ned" }
]
显然,你可以为每只猫添加额外的属性。假设您的现实世界应用程序会有某种用户id、名称和您提到的GPS位置。
我为ajax请求设置的data
属性:
data : { lastCat : (cats.length == 0 ? "" : cats[cats.length-1].name) }
基本上是传递最后一只猫的名称,并将其留给PHP,然后只返回自那只猫之后添加的猫的名称。显然,在现实世界中的应用程序中,您会为此使用用户id或记录时间戳。
EDIT:jQuery Ajax的旧语法-
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);
}
});
}
我想是这样的:
$.getJSON('http://yourserver.com/somefunction/path', function(data){
$.each(data, function (key, value) {
var anotherCat = new cat(value);
anotherCat.talk();
});
});