Ваша проблема в том, что любой код за пределами (и после) запроса $.getJSON
уже был выполнен к моменту получения ответа $.getJSON
.
Помните, что вызовы AJAX являются асинхронными. Это означает, что код, следующий за AJAX-запросом , не ожидает выполнения ответа . Так что это происходит задолго до того, как есть какой-либо ответ.
Ключ в том, что любой код, основанный на ответе от асинхронного запроса AJAX, должен выполняться (или вызываться из) внутри обратного вызова.
EDIT:
Для пояснения, в примере кода ниже, смотрите комментарии к коду. Это должно помочь объяснить проблему.
$(document).ready(function(){
var haikus=[];
alert("begin loop");
$.getJSON('http://haikuennui.com/random.php',function(data){
var i=0;
for(i=0;i<data.length;i++){
haikus[i]=[data[i].id,String(data[i].username),String(data[i].haiku)];
}
// The data in haikus is available here becuase
// this alert() doesn't run until the response is received.
alert(haikus[0][1]);
});
// Here the data in haikus is NOT available because this line
// of code will run ***before*** the response from the AJAX
// request from above is received.
// In other words, this alert() executes **immediately** without
// waiting for the $.getJSON() to receive its response.
alert(haikus[0][1]);
});