我正在嘗試使用JQuery,儘管我正在努力成功地等待ajax調用成功,然後再執行其他代碼。有沒有辦法等待ajax打電話?我見過一些例子,但似乎只是盲目等待x秒的時間?如何等待ajax調用返回
謝謝, 詹姆斯
我正在嘗試使用JQuery,儘管我正在努力成功地等待ajax調用成功,然後再執行其他代碼。有沒有辦法等待ajax打電話?我見過一些例子,但似乎只是盲目等待x秒的時間?如何等待ajax調用返回
謝謝, 詹姆斯
是的,你可以同步做要求:
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:
同步編程是不尊重的,不應該在人們使用的應用程序中使用。
jQuery的AJAX方法有一個成功處理程序。
你應該把你的代碼放在一個連接到這個處理程序的方法中。
考慮jQuery的網站上給出的例子:
$.ajax({
url: "test.html",
context: document.body,
success: function(){
$(this).addClass("done");
}
});
你可以在這裏看到,有一個success
處理器附帶的方法。這個方法會在ajax方法成功返回時執行。
正如在其他答案和下面的評論中已經指出的那樣,您現在可以使用延期代替這個簡單的success
handeler。這使您可以將多個操作附加到每個給定的事件。
延期是現在的方式。 –
好啊!很高興知道。 –
你要插入你的代碼中的 '成功' 的功能:http://api.jquery.com/jQuery.ajax/
看一看jQuery的deferreds。您無法停止此操作,但您可以在AJAX調用返回後調用其他代碼。
// No way to stop.
$.ajax(...);
doSomething();
但隨着deferds您可以:
$.ajax(...).success(function() {
doSomething();
});
看到這篇文章。
您可以使用成功或完成回調。如果服務器返回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
});
你能告訴你正在使用的代碼? –
您是否試過閱讀文檔? – TJHeuvel
有一個事件叫'成功' –