2012-01-31 48 views
0

这是我正在尝试做的。我试图从数据库中提取数据并创建一个新用户,并继续检查新用户的每一秒以及之前用户位置的变化(我正在使用Android应用程序跟踪GPS)。每次将新用户添加到数据库时,我都需要能够创建一个新实例,但我不确定如何执行此操作。我已经看到下面的例子,但是这些对象是在程序中定义的,并不是“自动”创建的。自动创建从Javascript数据库中拉出的对象

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程序,但是如何使用函数实例化新的“猫”?任何帮助将不胜感激。谢谢!

回答

1

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

OK,这是开始变得有意义。我实现了你的代码,但是我不断收到错误,提示“Uncaught TypeError:Object#没有方法'失败'”它似乎不理解.success,.fail或.always方法。这些应该在$ .ajax方法中吗? – mkyong 2012-01-31 11:03:23

+0

我很抱歉,我给了你一个jQuery Ajax解决方案,即使在你的问题中没有提及jQuery,我认为我包含在'.done()','.fail()'和'.always )'仅适用于版本1.5以上的版本 - 它使用较新的延迟对象样式。我编辑了我的问题,以显示它如何与旧样式成功处理程序一起看。 (对不起,我没有时间给出一个非jQuery的Ajax解决方案。)虽然在某处可能有语法错误 - 我实际上无法测试它,因为我没有服务器端部分解决方案... – nnnnnn 2012-01-31 11:25:44

+0

嗯,我想出了如何以不同的方式实现它,但这绝对有助于我更好地理解它。谢谢你的帮助! – mkyong 2012-01-31 13:03:59

0

像这样的事情我会想:

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