2012-04-23 84 views
12

嗨我的腳本中有2個Ajax調用,我需要他們運行asnyc業餘時間,但我需要第二個等待,直到第一個完成。jQuery等待,直到異步阿賈克斯調用完成

$.ajax({ 
     type: "POST", 
     url: "getText.asmx/ws_getText", 
     data: parO1, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert(msg.d.data); 
     } 
     , error: function() { 
      chyba("chyba v požadavku", "df"); 
     } 
    }); 
    if (parO2.length > 0) { 
     $.ajax({ 
      type: "POST", 
      url: "getText.asmx/ws_getText", 
      data: parO2, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       /*WAIT UNTIL THE FIRST CALL IS FINISHED AND THAN DO SOMETHING*/ 
      } 
     , error: function() { 
      chyba("chyba v požadavku", "df"); 
     } 
     }); 

那麼有什麼想法?謝謝

回答

15

如果使用jQuery 1.5+,則可以使用​​來完成此操作。喜歡的東西(簡稱爲簡潔的AJAX調用,只傳遞對象爲你完成以上工作)

$.when($.ajax("getText.asmx/ws_getText"), 
     $.ajax("getText.asmx/ws_getText")).done(function(a1, a2){ 

    // a1 and a2 are arguments resolved for the 
    // first and second ajax requests, respectively 
    var jqXHR = a1[2]; // arguments are [ "success", statusText, jqXHR ] 
}); 

你不知道哪個順序,他們將返回,所以如果你用手滾動這一點,你會需要檢查另一個請求的狀態並等到它返回。

1

您需要將第二個調用連接到第一個ajax調用的回調中。像這樣:

success: function(msg) 
{ 
    alert(msg.d.data); 

    if(par02.length > 0) 
    { 
     // Your 2nd ajax call 
    } 
}, 

由於JavaScript的犯規在多線程的客戶端上運行,直到某些條件得到滿足,你不能阻塞線程。

+0

,但是這會讓執行時間長,因爲第二個呼叫將被啓動後的第一個結束,我在想是這樣的:在第一次調用成功,我可以將某些變量設置爲true,並在第二次呼籲成功,我可以做到while(變量== false){等待}並繼續,但我不知道如何正確寫入 – user1352324 2012-04-23 21:28:20

+0

執行'等待'的唯一方法是'setTimeout',然後檢查您的全局變量。但從技術上講,這意味着您的超時可能在通話結束後發生,但仍在等待。只需向用戶顯示一個旋轉的gif或其他內容以指示服務器正在工作就可以了。 – Tejs 2012-04-23 21:30:01

1

使用jQuery的

$.ajax({ 
     type: "POST", 
     async:false, // ** CHANGED ** 
     url: "getText.asmx/ws_getText", 
     data: parO1, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert(msg.d.data); 
     } 
     , error: function() { 
      chyba("chyba v požadavku", "df"); 
     } 
    }); 
+0

感謝您的回答。我通過添加一些代碼格式來編輯它以提高可讀性。 – vlasits 2014-12-08 15:39:33

+0

@vlasits似乎沒有像大家想象的那樣大膽,我提交了一個帶有評論的編輯以解釋發生了什麼 – flyingfisch 2015-03-17 18:39:51