2012-02-15 64 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