【问题标题】:Automatically Creating Objects Pulled From Database in Javascript在 Javascript 中自动创建从数据库中提取的对象
【发布时间】:2012-01-31 09:56:01
【问题描述】:

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

【问题讨论】:

    标签: php javascript ajax json object


    【解决方案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);
          }
       });   
    }
    

    【讨论】:

    • 好的,这开始有意义了。我实现了您的代码,但我不断收到错误消息说“未捕获的 TypeError:对象 # 没有方法‘失败’”似乎不理解 .success、.fail 或 .always 方法。这些应该在 $.ajax 方法中吗?
    • 抱歉,我给了你一个 jQuery Ajax 解决方案,即使你的问题中没有提到 jQuery,我认为我包含在 .done()、.fail() 和 .always() 中的 Ajax 语法仅从大约 1.5 版开始工作 - 它使用较新的延迟对象样式。我已经编辑了我的问题,以展示旧式成功处理程序的外观。 (抱歉,但我没有时间提供非 jQuery Ajax 解决方案。)虽然某处可能存在语法错误 - 我实际上无法测试它,因为我没有服务器端的部分解决方案...
    • 好吧,我想出了如何以不同的方式实现它,但这肯定有助于我更好地理解它。感谢您的帮助!
    【解决方案2】:

    我认为是这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多