在foreach中获取ajax结果

Get ajax result in foreach

本文关键字:ajax 结果 获取 foreach      更新时间:2023-09-26

我尝试从服务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);
                }
            });
	};

您必须返回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函数,它不是从服务中获得的数据,所以必须返回数据变量。