greenbandit
greenbandit

Reputation: 2275

Get a variable after ajax done

I have this code for make some request to my server:

function myAjaxCheck(token) {
        $.ajax({
            type: 'POST',
            url: 'auth.php',
            data: {
                token: token,
            },
            dataType: 'json',
            success: function (data) {
                if (data.auth == 'OK') {
                    alert ('ok');
                    }
                } else {
                    alert('Error: ' + data.auth);
                }
            }
        }).done(function (data) {
            return data;
        });
    }

So, i need to pass the returned data into a variable like:

Var MyVariable = myAjaxCheck(token);
console.log(MyVariable);

at console:

undefined

Where is the problem, is supposed to data will returned when done, but isn't.

Upvotes: 5

Views: 10029

Answers (3)

alex
alex

Reputation: 490481

Because you are expecting a value to be returned immediately. You are using asynchronous XHR, so, the function will return (undefined in this case) before the XHR has a chance to finish and return its value.

Upvotes: 0

Tadeck
Tadeck

Reputation: 137420

Please see Waiting for $.post to finish.

Basically, it is better to use callbacks. Your variable seems to be undefined, because the code returning it to the console is executed before the AJAX request is finished.

Upvotes: 0

no.good.at.coding
no.good.at.coding

Reputation: 20371

By default, an ajax() request is asynchronous so the call to ajax() will usually return before the request completes. You could make use of a callback function instead.

function myAjaxCheck(token, callback) {
        $.ajax({
            type: 'POST',
            url: 'auth.php',
            data: {
                token: token,
            },
            dataType: 'json',
            success: function (data) {
                if (data.auth == 'OK') {
                    alert ('ok');
                    }
                } else {
                    alert('Error: ' + data.auth);
                }

                callback(data);
            }
        });
    }

var myVariable; 
 myAajxCheck(token, function(returnedData){ //anonymous callback function
    myVariable = returnedData;
    console.log(myVariable);
 });

If you absolutely must, you could use async: false inside the call to ajax().

Upvotes: 9

Related Questions