4

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

    $('.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

我是这样提出我的问题的:

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

4

2 回答 2

4

我想你想设置:

 async: false

默认情况下,所有请求都是异步发送的。如果您需要同步请求,请将此选项设置为 false。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。
另见这个老问题。
如何让 jQuery 执行同步而不是异步的 Ajax 请求?

于 2012-06-14T06:06:26.383 回答
0

从 jQuery 1.8 开始,不推荐在 jqXHR ($.Deferred) 中使用 async: false ;您必须使用完成/成功/错误回调。

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

于 2012-10-25T14:39:11.697 回答