我的页面中有四个Ajax调用。我总是希望优先考虑第一个ajax调用,所有其他的ajax调用应该等到第一个ajax调用完成,即使它被调用。有没有什么方法可以首先给出第一个ajax调用?
单击按钮将触发Ajax 2和Ajax 3。我们不能把Ajax 2和Ajax 3放在ajax调用成功
上//ajax 1
$.ajax({
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
type: 'GET',
dataType: 'json',
url: //URL
})
//ajax 2
$.ajax({
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
type: 'GET',
dataType: 'json',
url: //URL
})
//ajax 3
$.ajax({
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
type: 'POST',
dataType: 'json',
url: //URL
})
//ajax 4
$.ajax({
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
type: 'GET',
dataType: 'json',
url: //URL
})
答案 0 :(得分:1)
是的,你可以。当第一个结算时,只需启动其余的通话:
$.ajax( ... ) // First AJAX
.then(function(response) {
// Play with the response of first AJAX operation
return $.when([
$.ajax( ... ), // Second AJAX
$.ajax( ... ), // Third AJAX
$.ajax( ... ) // Fourth AJAX
]);
})
.then(function(response) {
// Play with the response of rest of the AJAX operations.
})
答案 1 :(得分:0)
请使用Done
方法。
// ajax 1
$.ajax({
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
type: 'GET',
dataType: 'json',
url: //URL
}).done(function() {
// ajax 2
// ajax 3
// ajax 4
});
有关详细信息,请查看API文档:http://api.jquery.com/jquery.ajax/
答案 2 :(得分:0)
每次执行ajax1
时,将返回的保证保存到全局变量(假设为ajax1Promise
)。
在2和3的按钮处理程序上使用以下代码:
ajax1Promise.done(function(){ajax2()});
ajax1Promise.done(function(){ajax3()});
分别
更新提供示例。我通过返回延迟分辨率的自定义承诺来模拟ajax。只需检查控制台日志: https://jsfiddle.net/1gopxj49/13/
在此示例中,如果ajax2
/ ajax3
在ajax1
正在进行时启动,则会等到它完成。