请参考下面的代码, 我已经将两个ajax都设置为async:false。 我发现当调用doUpdate2ndAJAX()的函数时,程序开始执行$(“。search”)。click();即使doUpdate2ndAJAX()尚未完成执行。
简而言之: 1. doUpdate2ndAJAX()执行 2. doUpdate2ndAJAX()尚未完成,开始执行$(“。search”)。click() 3. doUpdate2ndAJAX()完成执行和响应
我可以知道如何做到这一点 1. doUpdate2ndAJAX()执行 2. doUpdate2ndAJAX()完成执行和响应 3.拨打$(“。search”)。click();
[按顺序执行]
感谢。 -fsloke
firstCalled: function() {
$.ajax({
url: "XXX",
async: false,
success: function(response) {
doUpdate2ndAJAX();
$(".search").click();
}
});
}
function doUpdate2ndAJAX(){
$.ajax({
url: "YYY",
async: false,
success: function(response) {
// UPDATE SOMETHING
}
});
return false;
}
答案 0 :(得分:1)
使用Deferred对象,那些是操作异步调用的对象,你可以解决:
$.when($.ajax("/page1.php"), $.ajax("/page2.php"))
.then(myFunc, myFailure);
这样,myFunc在进行2次ajax调用后执行,而myFailure如果其中任何一次调用都有错误。
您可以在jquery官方文档中了解更多相关信息:JQuery Deferred Object
答案 1 :(得分:0)
您应该使AJAX调用异步,并在$(".search").click();
回调中为第二个请求调用success
。
根据您的结构,您可能需要向doUpdate2ndAJAX
添加一个参数,告诉它是否要拨打$(".search").click();
。
或者,您可以添加回调参数。
答案 2 :(得分:0)
我建议使用“完整”回调来调用$(“。search”)。click()。
您可以在此处看到成功与完整回调之间的差异: http://api.jquery.com/jQuery.ajax/