我正在对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
我怎样才能在功能之外获得第一次?
答案 0 :(得分:6)
所有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
}
答案 1 :(得分:1)
第二个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
成功回调中或通过成功回调中的函数调用处理变量。
答案 2 :(得分:0)
这是因为它是异步完成的(AJAX的基本原理之一)。您可以将async设置为false或使用其他一些回调构造来使用从get调用返回的值。