0

我在 else 结构中声明了一个数组

var days = new Array();
$.ajax({
      url: 'someurl',
      dataType: 'jsonp',
      success: processJSON
});

我在 processJSON 函数中处理来自 ajax 调用的数据

function processJSON(jsonData) {
    var weather = jsonData.data.weather;
    for(var key in weather) {
        var day = weather[key];

        days.push(new Array(day.tempMaxC, day.type));
    }
}

我在 days-array 中添加了一些其他数组。

如果我在控制台中检查它(在 processJSON-function 中),长度是三个/

然后,当我想在 ajax 调用下的某些代码中使用该变量时,没有任何效果,当我检查长度时它为 0。我猜这是声明的东西?

4

3 回答 3

1

你的 Ajax 调用下的代码是在 processJson 函数之后发生的吗?ProcessJson 函数的调用是异步的,并且仅在 Ajax 调用完成后发生。但是,它后面的代码可能之前发生过。所以这可能是一个时间问题。如果您需要该数组进行任何其他处理,您应该在回调中或在您知道回调已完成之后将其包含在内。

于 2013-07-31T16:11:49.387 回答
0

将声明放在条件/其他之外

var days = new Array();
if(...){
}else{
$.ajax
}
于 2013-07-31T16:09:08.517 回答
0

您需要等到 XHR 调用完成。看起来您正在使用 JQuery,因此请查看他们的延迟文档 ( http://api.jquery.com/deferred.then )。

你会以这样的方式结束:

$.ajax({
      url: 'someurl',
      dataType: 'jsonp'
}).then(function( jsonData ) {
    var weather = jsonData.data.weather;
    for(var key in weather) {
        var day = weather[key];
        days.push(new Array(day.tempMaxC, day.type));
    }        
    console.log( 'done!', days );
});
于 2013-07-31T16:16:41.253 回答