【问题标题】:get returned values from jquery get?从 jquery get 中获取返回值?
【发布时间】:2012-06-22 13:10:49
【问题描述】:

我正在对 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

如何在函数之外获取 firstid?

【问题讨论】:

标签: jquery get


【解决方案1】:

所有 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 技术上不正确。如果他将第二个 alert("firstid:" + firstid); 包裹在一个有 5 秒延迟的超时中,它将在该成功函数之外显示预期结果。
  • @iambriansreed 5 秒延迟???你怎么知道服务器响应需要多长时间???
  • 我不确定服务器可能需要多长时间才能响应,您是对的,但参数保持不变:get 回调之外的任何内容都不一定是未定义的。 OP 在get 回调范围之外定义变量是正确的,因此它已更新,后来对该变量的调用确实给出了预期的结果。最后不是所有 AJAX调用都是异步的,你其实可以将请求设置为同步的但是不推荐
  • 也不推荐将任意变量添加到全局范围内......因此在这里定义它们并传递它们是谨慎的(假设它们没有在其他地方使用......这个例子是有限的)跨度>
  • @user840930 不要这样做这会降低您的网络应用程序的速度,甚至可能会导致旧版浏览器崩溃。
【解决方案2】:

第二个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 成功回调中使用变量,或通过该成功回调中的函数调用。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多