11

As my framework grows i decided to split it into files, instead of leaving it in the main design file. However by doing that the return of a function doesn't return any value.

data isn't empty - if i alert the values in the js file they are there!

The functions:

1st the function in .js file (is included before the execution)

             var lock_get = 0;
             function get_data(data, destination) 
             {

                if (lock_get == 0)
                {
                    lock_get = 1;
                    $.ajax({
                        type: "POST",
                        url: destination,
                        async: true,
                        data: data,
                        success: function(data) 
                        {
                            lock_get = 0;
                            if (data)
                            {
                                return data;
                            }
                        }
                    });
                }
             };

So and here is the execution part:

    var test = get_data(data, destination);
    notice(test);

and test is empty... I already tried different ways for writing but I guess i missunderstood the possibilities of js?

2

2 Answers 2

11

You can't do that : as the call is asynchronous, the get_data function can't return the result of the ajax call.

What you should do is provide a callback to the get_data function and handle the result in the callback.

function get_data(data, destination, callback) 
         {

            if (lock_get == 0)
            {
                lock_get = 1;
                $.ajax({
                    type: "POST",
                    url: destination,
                    async: true,
                    data: data,
                    success: function(data) 
                    {
                        lock_get = 0;
                        if (data && callback)
                        {
                            callback(data);
                        }
                    }
                });
            }
         };

And call it like that :

get_data(data, destination, function(test){
   notice(test);
});
Sign up to request clarification or add additional context in comments.

1 Comment

Seriously thanks wasn't thinking about the callback! Of course it works now :)...
0

Alternatively you can return from synchronous AJAX call, it's generally BAD idea to use synchronous calls, but it may be useful sometimes:

http://pratyush-chandra.blogspot.com/2012/04/store-ajax-json-response-into.html

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.