Javascript 优先考虑一个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调用。我总是想把第一个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
    })

是的,你可以。当第一个问题解决时,只需启动其余的调用:

$.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
(左边的参考资料部分)。请检查控制台是否有错误。