【问题标题】:jQuery use returned JSON array outside of function using postjQuery使用post函数在函数外使用返回的JSON数组
【发布时间】:2013-05-01 17:01:00
【问题描述】:

我确定我遗漏了一些明显的东西,但无论是什么我似乎都无法弄清楚。

这就是我所拥有的

var warr = new Array();

$('#step3next').click(function() {
    $.post('AJAX_GetGameWords.asp',function(data) {
        fw(data.warray);
    },"json");

    $('.vardisplay3').append(warr+'');
});

function fw(x) {
    warr = [x]; 
}

最终我想要的是能够在任何地方使用warr数组。

如果我将$('.vardisplay3').append(warr+''); 放在 fw(data.warray); 下方然后它就可以正常工作并显示在 .vardisplay3 中,但在现在的位置上,它什么也不显示。

我认为由于 warr 设置为全局,它会起作用,但我显然错过了范围问题或其他什么。

谁能解释发生了什么以及我如何能够在任何地方使用warr数组。

谢谢

【问题讨论】:

  • 这不是范围问题,而是时间问题——$.post 回调函数直到至少在当前函数调用堆栈被清除后才会运行。

标签: jquery arrays post scope


【解决方案1】:

这不是范围问题,而是执行顺序问题。 .post()异步的,所以这行代码:

$('.vardisplay3').append(warr+'');

正在执行之前这行代码:

fw(data.warray);

范围很好,但是如果您希望在响应异步 AJAX 调用时发生某些事情(例如附加返回值),则需要从该 AJAX 调用的回调函数中调用它。否则它将在 AJAX 调用完成之前执行,并且没有任何数据可供使用。

【讨论】:

    【解决方案2】:

    post 是异步的。

    如果要使用返回的数据,需要使用成功回调

    http://api.jquery.com/jQuery.post/

    【讨论】:

      【解决方案3】:

      您可以像这样使用 ajax 调用来更改 $.post,这样可以轻松回调您的数据并防止您出现此问题...

      $.ajax({
        type: "POST",
        url: "AJAX_GetGameWords.asp",
        data: "",
        async: false,
        success: function(t){
          alert(t);// You can call your function HERE
        }
      });  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-30
        • 2010-12-11
        • 1970-01-01
        相关资源
        最近更新 更多