meclass.prototype.switch = function() {
var items = [];
$.getJSON('http://localhost/jsoner.php', function(data) {
$.each(data, function(key, val) {
items.push(val);
alert(items[0]); //this works
});
});
alert(items[0]); //this does not
}
我一直在修补这个问题,而不是真正得到它。我在我的所有jquery函数中都遇到了这个问题,所以它是基本的,我只是没有学习 - 而且没有运气找到答案。
答案 0 :(得分:7)
getJSON
方法是异步。执行将立即继续以下声明。只要服务器响应请求,回调函数将在稍后执行。
因此,任何依赖于异步请求结果的代码都需要在回调函数中移动。
这实际上是会发生的事情:
var items = []; //Declare `items`, empty array
//Make AJAX request
alert(items[0]); //It's still an empty array
//Wait some arbitrary amount of time...
//AJAX request complete, run the callback function
alert(items[0]); //Inside callback, items now contains elements