如何在一个ajax调用完成后进行其他ajax调用,第二个ajax调用不应该调用.stop函数

时间:2012-06-14 05:57:01

标签: jquery ajax

实际上我正在调用多个ajax调用,但我希望首先完成一些ajax调用并执行其stop函数中定义的atsk。但是一旦在stop方法中定义的函数执行并且那些ajax调用不应该调用一些ajax调用.stop方法再次

    $('.badgeContainer').ajaxStop(function() 
    {

          alert("ajax rqst completed");
    });

 $.ajax({

 type: "POST",

           url: "WebServices/abc.asmx/dosomething",
        data: "{  }",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function(serviceReply) {
                          var serviceReplyArray = serviceReply.d.split("#");

                    },
                    error: function(xhr, errDesc, exception) {
                                                                    }
                });

这里有另一个ajax调用,但这次不应该调用.ajaxstop

我正以这种方式提出问题:

假设有两个对webservice的ajax调用。当一个ajax调用完成依赖于tah的函数时,ajax调用应该在等待第二个jax调用执行之前执行。例如:一个ajax调用创建图表和其他ajax调用日志用户活动。如果显示chaet的功能依赖于创建图表所以函数在调用日志活动的aax调用之前执行。没有等待ajajx调用用户活动

2 个答案:

答案 0 :(得分:4)

我想你要设置:

 async: false

默认情况下,所有请求都是异步发送的。如果需要同步请求,请将此选项设置为false。请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作 另见这个老问题。
How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?

答案 1 :(得分:0)

  

从jQuery 1.8开始,使用async:false和jqXHR($ .Deferred)   弃用;您必须使用完整/成功/错误回调。

     

http://api.jquery.com/jQuery.ajax/(异步部分)

我觉得这有点烦人......开发人员应该给选择async: false进行阻止调用,如果平台允许的话 - 为什么限制它?我只是设置一个超时以最小化挂起的影响。

尽管如此,我现在正在1.8中使用一个队列,它是非阻塞的,并且工作得非常好。 Sebastien Roch创建了一个易于使用的实用程序,允许您排队功能并运行/暂停它们。 https://github.com/sebastien-roch/Jquery-Async-queue

    queue = new $.AsyncQueue();
    queue.add(function (queue) { ajaxCall1(queue); });
    queue.add(function (queue) { ajaxCall2(queue); });
    queue.add(function() { ajaxCall3() });
    queue.run();

在前2个函数中,我将queue对象传递给调用,这是调用的样子:

function ajaxCall1(queue) {
    queue.pause();
    $.ajax({
       // your parameters ....
       complete: function() {
         // your completing steps
         queue.run();
       }
    });
}

// similar for ajaxCall2

注意每个函数开头的queue.pause();queue.run()complete语句结束时继续执行队列。