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 に答える