实际上我正在调用多个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调用用户活动
答案 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) 弃用;您必须使用完整/成功/错误回调。
我觉得这有点烦人......开发人员应该给选择与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
语句结束时继续执行队列。