Javascript 数组不';我不满足,也许是有声明的东西
我在else结构中声明了一个数组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
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
等待。你应该专注于那些不需要等待的事情……谢谢,愚蠢的错误,但从现在起我会记住的。