2011-09-12 81 views
4

我正在嘗試使用JQuery,儘管我正在努力成功地等待ajax調用成功,然後再執行其他代碼。有沒有辦法等待ajax打電話?我見過一些例子,但似乎只是盲目等待x秒的時間?如何等待ajax調用返回

謝謝, 詹姆斯

+0

你能告訴你正在使用的代碼? –

+0

您是否試過閱讀文檔? – TJHeuvel

+0

有一個事件叫'成功' –

回答

4

是的,你可以同步做要求:

var bodyContent = $.ajax({ 
     url: "script.php", 
     global: false, 
     type: "POST", 
     data: {id : this.getAttribute('id')}, 
     dataType: "html", 
     async:false, 
     success: function(msg){ 
     alert(msg); 
     } 
    } 
).responseText; 

來源:http://api.jquery.com/jQuery.ajax/

然而,同步請求是一種倒退,因爲JS引擎(以及在某些瀏覽器,用戶界面)將阻塞,直到請求完成。道格拉斯克羅克福德曾寫過關於synchronous requests

同步編程是不尊重的,不應該在人們使用的應用程序中使用。
0

jQuery的AJAX方法有一個成功處理程序。

你應該把你的代碼放在一個連接到這個處理程序的方法中。

考慮jQuery的網站上給出的例子:

$.ajax({ 
    url: "test.html", 
    context: document.body, 
    success: function(){ 
    $(this).addClass("done"); 
    } 
}); 

你可以在這裏看到,有一個success處理器附帶的方法。這個方法會在ajax方法成功返回時執行。

正如在其他答案和下面的評論中已經指出的那樣,您現在可以使用延期代替這個簡單的success handeler。這使您可以將多個操作附加到每個給定的事件。

+0

延期是現在的方式。 –

+0

好啊!很高興知道。 –

0
  1. 使用異步:假
  2. 或使用一個回調函數
1

看一看jQuery的deferreds。您無法停止此操作,但您可以在AJAX調用返回後調用其他代碼。

// No way to stop. 
$.ajax(...); 
doSomething(); 

但隨着deferds您可以:

$.ajax(...).success(function() { 
    doSomething(); 
}); 

看到這篇文章。

http://www.erichynds.com/jquery/using-deferreds-in-jquery/

0

您可以使用成功或完成回調。如果服務器返回200,則成功將觸發。無論響應狀態如何,完成都將在請求完成時觸發。

$.ajax({ 
    url: "/path/to/action", 
    success: function() { 
     alert("do something if it's successful"); 
    }, 
    complete: function(request, status) { 
     alert("do something when it's finished, regardless of success."); 
    } 
}); 

,或者你可以做一個同步調用:

$.ajax({ 
    url: "/path/to/action", 
    async: false 
});