确保ajax函数在第二个非ajax函数触发之前完成

时间:2010-01-04 23:47:31

标签: javascript jquery ajax

与我刚问的问题类似,

如果我在jQuery中调用ajax函数然后调用非ajax函数,如何在第一个ajax回调函数完成之后阻止非ajax函数触发。在第一个ajax函数中声明async:false是否足够?

3 个答案:

答案 0 :(得分:4)

如果你在谈论这个:

$.ajax({...});
someFunction();

在AJAX调用完成之前,someFunction()不会发生,那么你有三个选择:

  1. 进行AJAX调用async: false不要这样做。这会让你的网页无法响应;
  2. someFunction()放入AJAX调用的完整/成功/错误回调中。这是推荐的方法;或
  3. 使用aplugin管理请求队列,例如Ajax Queue
  4. AJAX中的第一个A代表“异步”。您只需要习惯这些调用是异步的事实,并停止尝试在它们之上强制使用同步编程模型。适应新的编程模型。

答案 1 :(得分:1)

jQuery AJAX函数允许您提供仅在请求完成后调用的回调。将您的非ajax函数作为该回调的一部分。

答案 2 :(得分:0)

您可以使用如下回调函数:

$("#btnSample").on("click", function (e) {

 $.ajax({
    url: 'some_url',
    type: "GET",
    async: true,
    cache: false,
    dataType: "JSON",
    data: { 
      "p1": v1, 
      "p2": v2
    },
    success: function(result) {
      //call you second function here!
    }  
  }
});

});