在Javascript中自动创建从数据库中拉出的对象

时间:2012-01-31 09:56:01

标签: php javascript ajax json object

这就是我想要做的。我正在尝试从数据库中提取数据并创建新用户,并继续检查新用户的每一秒和以前用户位置的变化(我使用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'?任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

我不打算用长轮询或其他任何东西来复杂化 - 为了让你开始,我只是假设你可以使用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或记录时间戳来实现此目的。

编辑: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);
      }
   });   
}

答案 1 :(得分:0)

我想是这样的事情:

$.getJSON('http://yourserver.com/somefunction/path', function(data){
    $.each(data, function (key, value) {
        var anotherCat = new cat(value);
        anotherCat.talk();
    });
});