数组不'不要保持内容,也许是有宣言的东西

Array doesn't keep content, maybe something with declaration

本文关键字:也许 宣言 数组      更新时间:2023-09-26

我有一个在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数组中添加了一些其他数组。

如果我在控制台中(在processJSON函数中)检查它,长度为3/

然后,当我想在ajax调用下的某些代码中使用该变量时,什么都不起作用,当我检查长度时,它是0。我想这是有宣言的东西?

Ajax调用下的代码是否发生在processJson函数之后?对ProcessJson函数的调用是异步的,只有在Ajax调用完成后才会发生。然而,它后面的代码可能以前发生过。所以这可能是一个时机问题。如果您需要该数组进行任何其他处理,则应将其放在回调中,或者在您知道回调已完成之后。

将声明置于条件/else 之外

var days = new Array();
if(...){
}else{
$.ajax
}

您需要等待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 );
});