Reputation: 49
actually i 'm calling multiple ajax calls but i want some ajax calls completes first and exectute the atsk defined in its stop function.but some ajax call should be made once function defined in stop method executes and those ajax call should not cal.stop method once again
$('.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) {
}
});
another ajax call here but should not call .ajaxstop this time
i'm putting my question in this way:
suppose there are two ajax call to webservice. when one ajax call completes the function dependent on taht ajax call should get executed before waiting for second jax call execution.for eaxample: one ajax call create chart and other ajax call log user activities.if a functon to display chaet is dependent on create chart so that function get executed before calling aax call for log activities.no waiting for ajajx call for user activities
Upvotes: 4
Views: 7664
Reputation: 5090
As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the complete/success/error callbacks.
http://api.jquery.com/jQuery.ajax/ (async section)
I found this a bit annoying... developers should be given the choice to make a blocking call with async: false
if its something the platform allows - why restrict it? I'd just set a timeout to minimize the impact of a hang.
Nonetheless, I'm using a queue now in 1.8, which is non-blocking, and works quite nicely. Sebastien Roch created a easy to use utility that allows you to queue up functions and run/pause them. 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();
In the first 2 functions I pass the queue
object into the calls, here's what the calls would look like:
function ajaxCall1(queue) {
queue.pause();
$.ajax({
// your parameters ....
complete: function() {
// your completing steps
queue.run();
}
});
}
// similar for ajaxCall2
Notice the queue.pause();
at the beginning of each function, and queue.run()
to continue queue execution at the end of your complete
statement.
Upvotes: 0
Reputation: 22323
I think you want to set:
async: false
By default, all requests are sent asynchronously . If you need synchronous requests, set this option to false. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.
See also this old question.
How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?
Upvotes: 4