1
嘿我想實現能夠使用jsonp和相同的回調函數調用多個請求。我現在的做法是在每次調用之間設置間隔,這很可怕,因爲如果我想進行10次請求調用,則需要10秒才能檢索所有數據。如果我縮短時間,那麼它會返回一個parseerror。使用jsonp和相同的回調函數進行多個請求
我想知道是否有任何方法可以幾乎同時發出這些請求。
這裏是我的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) + ']');
}
);
}
我的回調函數是一個空的方法,因爲我想,如果我有取回我的所有數據在承諾中,那麼我就不會有錯誤(我錯了)。
這裏是發出請求的功能:
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);
}
如果我縮短了時間或者是壞連接的地方,那麼這將幾乎不起作用。
感謝您的時間和幫助! :)
你介意闡述?據我的理解,我需要爲無論多少我想要X數量的Ajax請求?並且是我從requestN中檢索的數據的響應? – lobcity42
Hi @ lobcity42,'then()'內部的回調只有在完成when()完成的所有ajax調用之後纔會執行。因此,您不必分別等待每個Ajax響應。 response1,response2 ..etc是您從Ajax調用中返回的responseData。 – Piyush
此外,您可以在$ .when()函數內創建儘可能多的ajax調用。 – Piyush