Javascript 优先考虑一个Ajax
我的页面中有四个Ajax调用。我总是想把第一个ajax调用放在第一位,所有其他ajax调用都应该等到第一个ajax调用完成,即使它被调用了。我们有没有办法优先考虑第一个ajax调用Javascript 优先考虑一个Ajax,javascript,jquery,html,Javascript,Jquery,Html,我的页面中有四个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: 'G
点击按钮将触发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
})
是的,你可以。当第一个问题解决时,只需启动其余的调用:
$.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.
})
请使用
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文档:每次执行
ajax1
,将返回的承诺保存到全局变量(比如ajax1Promise
)
在2和3的按钮处理程序上使用以下代码:
ajax1Promise.done(function(){ajax2()});
ajax1Promise.done(function(){ajax3()});
分别
更新:提供一个示例。我通过返回延迟解析的自定义承诺来模拟ajax。只需查看控制台日志:
在本例中,如果在
ajax1
进行过程中启动了ajax2
/ajax3
,它们将等待直到完成。将AJAX调用2、3和4放入第一个调用的回调中。但是,您不应该像这样进行多个AJAX调用。将您的逻辑转换为发出和接收所有所需数据的单个调用。ajax基本上是异步的。如果要将ajax调用排队,请使用队列或执行异步:false@KarthickKumar永远不要使用async:false
@RoryMcCrossan您能否解释一下不使用async:false同步的ajax请求是一种糟糕的用户体验,因为它们会在请求完成之前锁定浏览器。千万不要因为任何原因而冻结浏览器。点击按钮会触发Ajax 2和Ajax 3。我们不能把Ajax 2和Ajax 3放在Ajax成功的基础上call@ezhil--你刚才没提。@31皮,这不是借口@Pogrindis——我仍然不清楚修改解决方案的需求。正如OP前面提到的,此解决方案完全符合要求。后来,如果他完全改变了需求,那么修改解决方案需要付出巨大的努力。@31piy relaxy,我只是在开玩笑;)谢谢,在我的情况下,我应该用实际的ajax调用替换settimeout,对吗?对我来说,ajax调用也会增加页面加载,没有用户交互。是的。另外,返回的承诺是$.ajax()
实际返回的内容。Marinos,对不起,我对settimeout和ajax有点混淆。你能帮我理解一下吗?事实上,console.log(“ajax1complete”)并没有出现在我面前。我刚刚把我的代码放进了你能看一下吗?在你提供的示例中,你甚至没有包括jQuery
(左边的参考资料部分)。请检查控制台是否有错误。