2011-11-24 56 views
0

顯示我有一個應該顯示3個產品下面的代碼加載網頁時:項目不正確的順序

for(i=0;i<3;i++) { 
    document.forms['search_info'].elements['page'].value = i+',1,'+(i+1); 
    var jsonData = $('#search_info').serializeArray(); 
    var page = document.forms['search_info'].elements['page'].value.split(','); 
    var limitData = {'name':'limit','value': page[0]+','+page[1]}; 
    jsonData.push(viewData); 
    jsonData.push(limitData); 
    $.ajax({ 
     type: "GET", 
     dataType: "json", 
     url: 'index.php', 
     cache: false, 
     data: jsonData, 

     success: function(data) { 
      var text = data.output; 
      var el = $('#scroller'); 
      el.append('<li>' + text + '</li>').hide().fadeIn(450); 
     } 
    }); 
} 

,它實際上沒有工作,唯一的問題是產品訂購;每次我重新加載頁面時,項目都會以隨機順序出現。

任何想法爲什麼會發生這種情況?我該如何解決這個問題?

+0

可能的重複:http://stackoverflow.com/questions/6295305/php-jquery-ajax-calls-out-of-order/6295450#6295450 – aorcsik

回答

1

調用發生在同一時間,幾乎同時開始。完成順序可能每次都有所不同。

通過添加async: false到您的代碼它應該工作:

 $.ajax({ 
      type: "GET", 
      dataType: "json", 
      url: 'index.php', 
      cache: false, 
      data: jsonData, 
      async: false 

而且看它這裏的文檔:http://api.jquery.com/jQuery.ajax/

1

這是因爲AJAX調用是異步的。當您按順序觸發它們時,實際的完成順序完全取決於其他因素:遠程服務器響應速度有多快,每個HTTP連接的工作速度有多快等...

如果需要擔保要顯示響應的順序,您必須在響應中嵌入訂購信息,以說明「該數據用於請求#0」或「...請求#2」等等,然後使用額外的信息來確保您將響應數據注入適當的位置。