Проблема в том, что stuff
равен undefined
, когда $.each
работает, потому что stuff
еще не закончил работу. Все должно быть в обратном вызове. Существует множество способов обойти это от самого уродливого и хакерского из setInterval()
, который проверяет, если stuff === undefined
, а если НЕТ, то делает $.each
более естественным JS-способом - просто использовать обратные вызовы.
Лично я настоятельно рекомендую вам просто более эффективно использовать обратные вызовы. Вот что я бы сделал. Это должно поставить вас на правильный путь. Очевидно, что многое из этого является ложным кодом, но его можно легко изменить в соответствии с вашими потребностями.
var cachedImageData = {}; //To check if data exists for the search term
var displayImages = function(stuff){
$.each(stuff.items, function(i,item) {
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
}
$('button').bind('click',function(){ //Triggers the ajax...
if(cachedImageData[$('input').val()] === undefined){ //If this search doesn't exist...
$.ajax({
url:''
data:{ tag: $('input').val() }, //Get the value however
success: function(data){
cachedImageData[$('input').val()] = data; //Save for later
displayImages(data); //Run the display images function which is your $.each()
}
});
}
});