Skip to content Skip to sidebar Skip to footer

Waiting For Ajax Responses To Fill Object

I'm using AJAX to get some values from a server and I'm doing it asynchronously. How can I stop somehow to wait until the AJAX request ends? This is my code: var response = {} for

Solution 1:

As it's probably the answer, I'll post it here. I think you're looking for:

http://api.jquery.com/ajaxComplete/

You can use this to find out when all of your ajax has completed and then do something with the response.

Solution 2:

OK I figured it out. Because ajaxComplete is launching after every single AJAX request as I said before I had to create function that will wait until all request have been done. So I did it like this:

I changed my function:

var response = {}
for (var i = 0; i < length; i++){
        $.ajax({
            url : url[i],
            dataType : 'json'
        }).success(function(result) {
            processResult(result);
        })
}

to:

    response = {}
    for (var i = 0; i < length; i++){
      callAJAX(url[i]);
    }
_wait4ajax();

function callAJAX is like this:

functioncallAJAX(url){
            $.ajax({
                url : url[i],
                dataType : 'json'
            }).success(function(result) {
                processResult(result);
            })
}

and _wait4ajax is function where I check if all properties of object aren't undefined so: (I've got lists of properties which should be filled in object - this property is in visibleLayers array

function_wait4ajax(){
        var controlArray = [], self = this;

        var length = this.visibleLayers.length;
        for (var i = 0; i < length; i++) {
            if (this.cachedFeatures[this.visibleLayers[i]] === undefined) {
                controlArray.push('false');
            } else {
                controlArray.push('true');
            }
        }
        if (controlArray.indexOf('false') != -1) {
            setTimeout(function() {
                self._wait4ajaxComplete();
            }, 50);
        } else {
            //AJAX has ended - Object is ready
        }
}

I messed up my pseudocode (created for this site purpose) with actual code from my project, so it will probably doesn't work in this form, but I want to specify specific idea of this subject. fill free to edit this post. :)

Solution 3:

The answer for this question will do what you want:

How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?

Your code:

var response = {}
for (var i = 0; i < length; i++){
        $.ajax({
            url : url[i],
            dataType : 'json',
            async:   false,
            success: function(result) {                
                processResult(result);
            }
}

Post a Comment for "Waiting For Ajax Responses To Fill Object"