2013-07-23 3 views
3

У меня есть каждый цикл, который вытаскивает информацию о четырехкварталах. Он выглядит примерно так:

$.getJSON('https://api.foursquare.com/v2/venues/search?search_string_here',  
function(data) { 
    $.each(data.response.venues, function(i,venues){ 
      var content = foursquare stuff; 
      $(content).appendTo("#fourSquare"); 
    }); 
}); 

Мне нужно инициировать функцию после завершения каждого цикла. Это работает, если помещаются после каждого цикла:

$("#fourSquare").promise().done(function() { 
    //do stuff 
}); 

Я не знаком с promise - странным делом в том, что она работает с любым селектором. Два вопроса:

1) Является ли это лучшим способом для каждого обратного вызова? 2) Каков правильный селектор здесь? Каждый из них не перебирает уже существующие элементы, поэтому я не уверен, что «обещаю»

+2

При использовании на элементе, .promise получает объект обещания, которое относится к отложенному объекту, который решает, когда вся поставленные в очереди метода является полной, такими как анимации. Он не отслеживает запросы ajax прежде всего потому, что запросы ajax напрямую не связаны с элементами. –

ответ

3

$.getJSON вернет обещание, которое вы можете использовать. Это будет называться после обратного вызова.

var $ajax = $.getJSON('url', function(data){ 
    // your $.each 
}); 

$ajax.done(function(){ 
    // do stuff 
}); 
+0

это замечательно, спасибо! – JCHASE11

+0

Добро пожаловать! :-D –

0

Вы должны использовать обещание, возвращенное getJSON:

$.getJSON(...) 
    .then(function() { $.each(...); }) 
    .then(function() { ... }); 
Смежные вопросы