Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Returning data from jQuery ajax request

I'm trying to get a function to perform an ajax query and then return the interpreted JSON as an object. However for whatever reason, once this request is performed, the data is only accessible from within the function.

    function getCacheImage(direction) {

            jQuery.ajax({ 
                    url: json_request_string,
                    success: function(data) {
                    return data;
                    }
            });

    }

How can I get this function to return 'data' appropriately?

Thanks.

like image 584
ensnare Avatar asked Dec 17 '22 03:12

ensnare


2 Answers

You need to either use a synchronous ajax request (not typical or recommended) and capture the data into a variable in the outer scope, or figure out how to manipulate the data in the callback function. The problem is that the ajax function returns before the ajax call is complete -- it's asynchronous.

Synchronous way:

 function getCacheImage(direction) {
        var capture;
        jQuery.ajax({ 
                url: json_request_string,
                aSync: false,
                success: function(data) {
                   capture = data;
                }
        });
        return capture;
 }

Typical, using callback

 function getCacheImage(direction,callback) {

        jQuery.ajax({ 
                url: json_request_string,
                success: function(data) {
                   callback( data );
                }
        });
 }

 getCacheImage('left', function(data) {
      ...do something with the data...
 }
like image 106
tvanfosson Avatar answered Dec 30 '22 22:12

tvanfosson


You can't. The first letter of the AJAX acronym stands for asynchronous, meaning that AJAX requests are sent and control is returned immediately to the calling function. What you need to do is to work with the data in the callback function.

like image 33
Darin Dimitrov Avatar answered Dec 30 '22 20:12

Darin Dimitrov