1

我正在 jquery 调用 get 和 getJSON,但无法访问回调函数之外的返回值。如何访问返回的数据?

        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

如何在函数之外获取 firstid?

4

3 回答 3

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
}
于 2012-06-22T13:12:46.713 回答
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成功回调中或通过该成功回调中的函数调用使用变量。

于 2012-06-22T13:13:21.610 回答
0

这是因为它是异步完成的(AJAX 的基本原理之一)。您可以将async设置为 false 或使用其他一些回调构造来使用从 get 调用返回的值。

于 2012-06-22T13:13:04.670 回答