我正在尝试使用JQuery,尽管我在努力成功等待ajax调用成功然后执行更多代码。有没有办法等待ajax打电话?我看过一些例子,但似乎只是盲目地等待x秒钟?
谢谢, 詹姆斯
答案 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引擎(在某些浏览器中,用户界面)将阻塞,直到请求完成。 Douglas Crockford曾写过synchronous requests:
同步编程是不尊重的,不应该在人们使用的应用程序中使用。
答案 1 :(得分:1)
jQuery的ajax方法有一个成功的处理程序。
您应该将您想要触发的代码放在附加到此处理程序的方法中。
考虑一下jQuery网站上给出的例子:
$.ajax({
url: "test.html",
context: document.body,
success: function(){
$(this).addClass("done");
}
});
你可以在这里看到有一个附有方法的success
处理程序。当ajax方法成功返回时,将执行此方法。
正如其他答案和下面的评论中所指出的,您现在可以使用延迟而不是这个简单的success
handeler。这允许您将多个动作附加到每个给定的事件。
答案 2 :(得分:1)
看看jQuery deferreds。您不能暂停此操作,但可以在AJAX调用返回后调用其他代码。
// No way to stop.
$.ajax(...);
doSomething();
但是对于延期,你可以:
$.ajax(...).success(function() {
doSomething();
});
请参阅此文章。
答案 3 :(得分:0)
您必须在“成功”功能中插入代码:http://api.jquery.com/jQuery.ajax/
答案 4 :(得分:0)
答案 5 :(得分: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
});