从jquery获取返回值?
我正在对get和getJSON进行jquery调用,但是无法访问回调函数之外的返回值。 如何访问返回的数据?
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
我怎么能在function之外得到第一次?
所有AJAX呼叫都是异步的
所以你需要使用回调。 外面的任何东西都会返回undefined
。
$.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); doSomethingWithFirst(firstid); }); function doSomethingWithFirst(f) { //NOW do something }
这是因为它是异步完成的(AJAX的基本原理之一)。 您可以将async设置为false或使用其他一些回调构造来使用从get调用返回的值。
第二次alert("firstid:" + firstid);
返回undefined
因为在执行时它实际上是undefined
。
第一个alert("firstid:" + firstid);
返回$.get
完成后触发的预期结果。
AJAX – 代表异步JavaScript和XML。 异步事件是独立于主程序流发生的事件。 虽然您可以将请求设置为同步,但不建议这样做 。
如果你包裹了你的第二个alert("firstid:" + firstid);
在延迟5秒的超时中,它将显示预期的结果。
setTimeout(function() { alert("firstid:" + firstid); }, 5000);
或者你可以包装你的第二个alert("firstid:" + firstid);
在延迟1秒的间隔中,它最终会显示预期的结果。
var callback_interval = setInterval(function() { if(typeof(firstid) == 'undefined') return; clearInterval(callback_interval); alert("firstid:" + firstid); }, 1000);
但最好直接在$.get
成功回调中使用变量,或者通过成功回调中的函数调用。