2014-03-04 79 views
0

我得到一個用AJAX調用的用戶列表,但在AJAX中,我調用另一個AJAX來獲取一些我在第一次AJAX調用時無法獲得的信息。另一個AJAX調用中的jQuery AJAX。同步和完成的問題

這基本上是我正在使用的結構,我已經刪除了一些不必要的代碼,只會混亂,可能在這裏和那裏存在一些語法錯誤。 但代碼基本上工作,但有一些問題。

function doAJAX(){ 
    $(".loading").show(); 
    $("#table").hide(); 

    $.ajax({ 
    type: "POST", 
    url: "@Url.Action("Action", "Controller")", 
    data: { variable: varVariable}, 
    dataType: "json", 
    success: function (data) { 
     $.each(data, function (index, value) { 
      $.ajax({ 
       type: "POST", 
       url: "@Url.Action("Action", "Controller")", 
       data: { variable: value.id}, 
       success: function (data2) { 
       $.each(data2, function (index2, value2) { 
        $("#tableBody").append("<tr><td>" + value.test +"</td><td>" + value2.test +"</td></tr>"); 
       }); 
       } 
      }); 
     }); 
    } 
    }); 
} 
  1. 我躲在我的表在開始時,AJAX是完成我想要再次顯示它的時候。我應該把它放在哪裏?即使我將它放在第一個AJAX成功函數的末尾,它也不起作用,因爲它在另一個AJAX仍在運行時被執行。

  2. 出於某種原因,我的列表中的奇次,每次的AJAX運行結束了,我的列表是按字母順序與此AJAX分揀但它在結束了隨機每次,有時用戶亞當是在開始時,有時中等等。該列表本身是好的,正確的順序

  3. 我做了很多數學是可能減慢第二AJAX調用的這可能是爲什麼它在一個奇怪的順序

這兩個結束問題正在發生,因爲兩個AJAX不是「一起」運行,而是單獨運行,是否有一種方法可以使它們彼此同步,並且有一種確保AJAX完成的好方法,現在我可以顯示我的表了嗎?

+2

您可以將'async:false'添加到您的第二個'ajax'調用中,但這可能會凍結瀏覽器。 – ojovirtual

+0

@HenrikP:你在這裏所做的ajax調用的級別非常複雜。如果可能的話,嘗試進行一次ajax調用來檢索最大數據。 – dreamweiver

+0

@ojovirtual這似乎做到了。也似乎在較慢的計算機上工作,除非凍結問題是瀏覽器特定的 – HenrikP

回答

0

在循環內發送ajax請求似乎不是一個好主意。爲什麼不發送一個包含id數組的ajax請求作爲數據,在你的serverside腳本中,只需獲取「WHERE id IN(id_list)」用戶記錄數組並將它們作爲json編碼對象返回,然後將其輸出到雙循環,第一個爲<tr>,第二個爲字段列表。

對不起,我不能提供代碼,因爲我不知道什麼是從您的請求返回到服務器。