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

答案 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函数它不是一个数据你从服务中获得,你必须返回数据变量。