【发布时间】:2017-01-16 05:49:50
【问题描述】:
嘿,我想实现能够使用 jsonp 和相同的回调函数调用多个请求。我目前这样做的方式是设置每次调用之间的间隔,这很可怕,因为如果我想进行 10 次请求调用,则需要 10 秒才能检索所有数据。如果我缩短时间,那么它会返回一个解析错误。
我想知道是否有任何方法可以几乎同时提出这些请求。
这是我的ajax请求调用代码:(相关代码)
var parameterMap = OAuth.getParameterMap(message.parameters);
console.log("3");
$.ajax({
'url' : message.action,
'data' : parameterMap,
'dataType' : 'jsonp',
'async' : 'true',
'jsonpCallback' : 'cb',
'cache': true
})
.done(function(data, textStatus) {
console.log("Coming in");
var mapIndex = yelpRequestCounter.toString();
console.log("Map Index being set is: " + mapIndex);
yelpResults = yelpResults.set(mapIndex, data.businesses);
console.log("4");
console.log("Success promise: " + yelpRequestCounter);
console.log("Ending");
if(yelpRequestCounter == 9){
findPriorityResuts(subPoints);
yelpRequestCounter = 0;
}
// console.log('success[' + JSON.stringify(data) + '], status[' + textStatus + ']'); //', jqXHR[' + JSON.stringify(jqXHR) + ']\n');
}
)
.fail(function(data) {
console.log("Failed")
// console.log('error[' + errorThrown + '], status[' + textStatus + '], jqXHR[' + JSON.stringify(jqXHR) + ']');
}
);
}
我的回调函数只是一个空方法,因为我认为如果我在 promise 中检索了所有数据,那么我就不会出错。(我错了)。
这是发出请求的函数:
var generateBusiness = function(term, subPointResults){
console.log("generateBusiness is being called");
var waitForCB = setInterval(function(){
console.log("CB Counter = " + yelpRequestCounter);
latlngString = subPointResults[yelpRequestCounter].lat().toString() + "," + subPointResults[yelpRequestCounter].lng().toString();
yelpSearch(term, latlngString,subPointResults);
yelpRequestCounter++;
console.log(yelpRequestCounter + "---------------------");
if(yelpRequestCounter === subPointResults.length){
console.log("It stops!");
clearInterval(waitForCB);
}
},1000);
}
如果我缩短了时间或在连接不良的地方,那么这几乎不起作用。
感谢您的时间和帮助! :)
【问题讨论】:
标签: javascript jquery ajax jsonp