2
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 函数中都遇到了这个问题,所以这是我还没有学过的基本知识——也没有运气找到答案。

4

1 回答 1

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
于 2012-10-14T09:43:22.017 回答