用Javascript自动创建从数据库中提取的对象


Automatically Creating Objects Pulled From Database in Javascript

以下是我要做的。我试图从数据库中提取数据,创建一个新用户,并继续每秒检查新用户和以前用户位置的变化(我使用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();
    });
});