Javascript 数组不';我不满足,也许是有声明的东西

Javascript 数组不';我不满足,也许是有声明的东西,javascript,arrays,Javascript,Arrays,我在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 i

我在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。我想这是与声明有关的?

将声明置于条件之外/else

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

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

您需要等待XHR调用完成。看起来您正在使用JQuery,所以请查看他们的延迟文档()

您将以以下内容结束:

$.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 );
});

AJAX是异步的,所以当您说要在AJAX调用下的代码中使用它时,很可能还没有填充它。在
processJSON
事件中处理它,或者添加另一个回调…并查看为什么在控制台中看到它。这会有什么变化?调用完成后,他会使用
processJSON
等待。你应该专注于那些不需要等待的事情……谢谢,愚蠢的错误,但从现在起我会记住的。