在foreach中获取ajax结果

时间:2016-05-15 16:56:22

标签: javascript jquery ajax

我尝试从服务yelp加载数据,请求没问题,但是我无法将其推送到数组并返回它。 我需要在每次迭代中获得ajax结果。 如何在收到ajax结果之前停止它?

任何人都可以帮助我吗?



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

	return locationDescs;
};



var getLocationDesc = function(address){

			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){
                	console.log(data);
                }
            });
	};




1 个答案:

答案 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函数,就在ajax的success函数内部返回data这样:return data;因为返回整个ajax函数它不是一个数据你从服务中获得,你必须返回数据变量。