I am making jquery calls to get and getJSON, but cannot access returned values outside of callback function. How can I access the returned data?
var firstid;
var nextid;
$.get(callUrl, function(data) { // call to add node
var n = data.indexOf("id-");
var m = data.indexOf("id-");
firstid = data.substr(n+3,m - (n+3));
nextid = data.substr(m+3);
alert("firstid:" + firstid); // returns correct value
});
alert("firstid:" + firstid); // returns undefined for firstid
how can I get firstid outside the function?
ALL AJAX CALLS ARE ASYNCHRONOUS
SO you need to use callbacks. anything outside that will return
undefined
.This is because it is done asynchronous (one of the basic principles of AJAX). You can set async to false or use some other callback construction to use your value returned from the get call.
The second
alert("firstid:" + firstid);
returnsundefined
because at the moment of execution it is in factundefined
.The first
alert("firstid:" + firstid);
returns the expected result as it fires after the$.get
is finished getting.AJAX - Stands for Asynchronous JavaScript and XML. Asynchronous events are those occurring independently of the main program flow. While you can set the request to synchronous it is not recommended.
If you wrapped your second
alert("firstid:" + firstid);
in a timeout with a 5 second delay it would display the expected result.Or you could wrap your second
alert("firstid:" + firstid);
in an interval with a 1 second delay it would eventually display the expected result.But it's best to work with the variables directly in the
$.get
success callback or via function calls within that success callback.