2016-05-15 6 views
0

Я пытаюсь загрузить данные из сервисного визга, без проблем с запросом, но я не могу нажать его на массив и вернуть его. Мне нужно получить результат ajax на каждой итерации. Как остановить его до получения результата ajax?Получите ajax результат в foreach

Может ли кто-нибудь мне помочь?

this.getDataForPlaces = function(addresses){ 
 
\t var locationDescs = []; 
 
\t _.each(addresses, function(address){ 
 
\t \t var promise = getLocationDesc(address).then(function(data) { 
 
\t \t   locationDescs.push(data); 
 
\t \t }); 
 
\t }) 
 

 
\t return locationDescs; 
 
}; 
 

 

 

 
var getLocationDesc = function(address){ 
 

 
\t \t \t var parameters = []; 
 
      
 
      var message = { 
 
       'action' : 'http://api.yelp.com/v2/search', 
 
       'method' : 'GET', 
 
       'parameters' : parameters 
 
      }; 
 

 
      OAuth.setTimestampAndNonce(message); 
 
      OAuth.SignatureMethod.sign(message, accessor); 
 

 
      var parameterMap = OAuth.getParameterMap(message.parameters); 
 
      return $.ajax({ 
 
       'url' : message.action, 
 
       'cache': true, 
 
       'method':message.method, 
 
       'data' : parameterMap, 
 
       'dataType' : 'jsonp', 
 
       'jsonp' : 'callback', 
 
       'success':function(data){ 
 
       \t console.log(data); 
 
       } 
 
      }); 
 
\t };

+0

Не возвращайте полную функцию ajax, только внутри функции 'success' ajax возвращает' data' следующим образом: 'return data;', потому что возвращает всю функцию ajax, это не данные, которые вы получаете от служб, вы должны вернуть переменную данных. например, проверьте мой ответ на ваш вопрос. –

+0

@Arsh Ajax в состоянии ожидания, в то время как foreach работает, как остановить итерацию до получения значения ajax? –

+0

Пожалуйста, проверьте мой ответ, чтобы узнать, как вы можете это сделать. –

ответ

0

Вы должны вернуть переменную data вместо ajax функции следующим образом: заменить следующие

return $.ajax({ 
       'url' : message.action, 
       'cache': true, 
       'method':message.method, 
       'data' : parameterMap, 
       'dataType' : 'jsonp', 
       'jsonp' : 'callback', 
       'success':function(data){ 
        console.log(data); 
       } 
      }); 

с

$.ajax({ 
       'url' : message.action, 
       'cache': true, 
       'method':message.method, 
       'data' : parameterMap, 
       'dataType' : 'jsonp', 
       'jsonp' : 'callback', 
       'success':function(data){ 
        return data; 
       } 
      }); 

для приостановки/ЗБ Опанье цикла до запроса AJAX завершает можно заменить следующее:

var promise = getLocationDesc(address).then(function(data) { 
       locationDescs.push(data); 
      }); 

с

var promise = $.when(getLocationDesc(address)).done(function(data){ 
    locationDescs.push(data); 
}); 

если выше не работает, то используйте следующую команду и заменить весь цикл со следующими

var locationDescs = []; 
    _.each(addresses, function(address){ 
       locationDescs.push(getLocationDesc(address)); 
    }); 
$.when.apply($,locationDescs).done(function(){ 
}); 

Не возвращайте полную функцию ajax, только внутри функции success функция ajax возвращает data следующим образом: return data;, потому что возвращает всю функцию ajax, это не данные, которые вы получаете от служб, вам нужно вернуть переменную данных.

+0

в любом случае, данные не определены. –

+0

Вы использовали: данные возврата; внутри ajax? И где вы получаете неопределенные данные? –

+0

Да, я изменил код, как в вашем примере. –

Смежные вопросы