Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Return $.get data in a function using jQuery

I'm trying to call a function that contains jQuery code. I want this function to return the results of the jQuery statement. It is not working, and I'm trying to figure out why.

function showGetResult (name) {     var scriptURL = "somefile.php?name=" + name;     return $.get(scriptURL, {}, function(data) { return data; }); }  alert (showGetResult("John")); 

The alert displays "[object XMLHttpRequest]." However, if I run the jQuery statement by itself, outside of a function, it works fine -> $.get(scriptURL, {}, function(data) { alert(data); })

I'd like to be able to re-use this code by putting it inside of a function that returns the $.get data. What fundamental mistake am I making here?

like image 363
Kai Avatar asked Oct 28 '09 19:10

Kai


People also ask

Can jQuery return value?

You cannot return variable value from jQuery event function.

What does the get () jQuery function do?

jQuery get() Method get() method loads data from the server using a HTTP GET request.

What does $() return in jQuery?

The jQuery Object: The Wrapped Set: Selectors return a jQuery object known as the "wrapped set," which is an array-like structure that contains all the selected DOM elements. You can iterate over the wrapped set like an array or access individual elements via the indexer ($(sel)[0] for example).


2 Answers

You have a few different mistakes. First, $.get doesn't return the return value of the callback function. It returns the XHR object. Second, the get function isn't synchronous, it's asynchronous so showGetResult will likely return before get completes. Third, you can't return something from inside the callback to the outer scope. You can, however, bind a variable in the outer scope and set it in the callback.

To get the functionality that you want, you'll need to use $.ajax and set the async option to false. Then you can define a variable in the outer scope and assign it in the ajax callback, returning this variable from the function.

function showGetResult( name ) {      var result = null;      var scriptUrl = "somefile.php?name=" + name;      $.ajax({         url: scriptUrl,         type: 'get',         dataType: 'html',         async: false,         success: function(data) {             result = data;         }       });      return result; } 

You would probably be better served, though, figuring out how to do what you want in the callback function itself rather than changing from asynchronous to synchronous calls.

like image 172
tvanfosson Avatar answered Oct 02 '22 18:10

tvanfosson


The fundamental mistake you are making is that the AJAX call is made asynchronously, so by the time you return, the result is not yet ready. To make this work you could modify your code like this:

$(function() {     showGetResult('John'); });  function showGetResult (name) {     $.get('somefile.php', {          // Pass the name parameter in the data hash so that it gets properly         // url encoded instead of concatenating it to the url.         name: name      }, function(data) {          alert(data);      }); } 
like image 29
Darin Dimitrov Avatar answered Oct 02 '22 17:10

Darin Dimitrov