2012-02-15 67 views
1

我在index.php中有一个ajax函数,它调用返回JSON响应(数组)的页面thread.php。我基本上想要解析数组,以特定的html格式显示它,获取该数组最后一行的最后一个值,并将其发送回前面提到的相同ajax调用。所以Ajax基本上是一个循环。发送回ajax调用返回的响应

function returnValue() 
{ 
$.ajax({ 
      async: true, 
      type: "GET", 
      url: "thread.php", 
      data: {lastposted : dateposted}, 
      dataType: "json", 

      success: function (json) { 
       if(json) { 
        { 
         for (var i = 0, len = json.length; i < len; i++) { 

          var results = json[i]; 
          var newDiv = $("<div><img src='" + results[0] +"'/>" + results[2] + results[3] + results[4] + results[5] + "</div><br>"); 
          $('#chatContents').append(newDiv); 
          var dateposted = results[5]; 
         } 
        } 
       } 
      } 
     }); 
} 

储值dateposted需要使AJAX调用时要作为输入发送。 dateposted的默认值将为0. 我不确定这是否可以完成。我乐于接受建议。

回答

1

可以使这个简单了很多,你并不需要使用扩展获取语法:

var returnValue = (function() { 
    var dateposted = 0; 
    return function() { 
     $.get("thread.php", { "lastposted": dateposted }, function(result) { 
      // display your chats 
      dateposted = result[result.length-1][5]; 
     }, "json"); 
    } 
})(); 
+0

这工作完美。有一些改变要做。使它完美运作后。意识到你编辑了你的答案,这与我所做的改变是一样的。另外需要注意的是,是否可以在后台不断刷新thread.php?当然,当我向thread.php添加时,它也会在ajax调用中作为响应返回,并因此抛出json数组循环。 – 2012-02-15 05:47:13

0

解决问题的一个简单方法是在函数调用之外声明日期和默认值,并在循环中使用它来存储最后一个值。并有一个新的Ajax函数调用。我希望这是你想要的。

function returnValue() 
{ 

var dateposted=0; 
$.ajax({ 
      async: true, 
      type: "GET", 
      url: "thread.php", 
      data: {lastposted : dateposted}, 
      dataType: "json", 

      success: function (json) { 
       if(json) { 
        { 
         for (var i = 0, len = json.length; i < len; i++) { 

          var results = json[i]; 
          var newDiv = $("<div><img src='" + results[0] +"'/>" + results[2] + results[3] + results[4] + results[5] + "</div><br>"); 
          $('#chatContents').append(newDiv); 
          dateposted = results[5]; 
         } 
        } 
       } 
      } 
     }); 
} 
+0

一旦回到顶端,它不会再次得到重置为0,怎么目前这正是我所经历的。我在var dateposted = 0之后放置了一个警报;并且它总是返回0. – 2012-02-15 05:27:06

+0

为什么它会回到顶端并且再次启动函数?? .....你在哪里检查警报???? for循环之前或之前....如果仍然显示0即使在for循环之后意味着它不在循环内......你能够查看已更新的#chatcontents吗? – thecodejack 2012-02-15 05:48:04

+0

没关系。我使用了上面提到的方法。并做了一些调整,它现在工作正常:)至于你的问题,我把警报后,var dateposted = 0;它也显示我的消息,所以这意味着它正在经历循环。我猜想dateposted = results [5];当它完成循环,并进行下一个Ajax调用,它被设置为0 – 2012-02-15 05:58:40