Я уже прошел этот вопрос. Are recursive AJAX calls a bad idea? Здесь ответ, представленный Джастином Нисснером, хорош (с использованием обещаний). Но моя проблема немного отличается. Я хочу позвонить 10 ajax calls
рекурсивно. Как после завершения первого вызова Ajax, я сделать что данные (предоставляемые Ajax вызова), на мой взгляд, и в то же время я буду называть вторым Аякса call.So мой пример кода будет выглядеть следующим образом:Создание множества вызовов AJAX рекурсивно - плохая идея
(function() {
var downloadAsync = function(url, callback) {
var httpRequest;
if (window.XMLHttpRequest) {
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState === 4 && httpRequest.status === 200) {
callback(httpRequest.responseText);
}
}
httpRequest.open("GET", url, true);
httpRequest.send();
}
function renderData(data) {
//data render logic
}
downloadAsync("mathmatics.json", function(response) {
renderData(response);
downloadAsync("science.json", function(response) {
renderData(response)
downloadAsync("english.json", function(response) {
renderData(response);
....................................
});
});
});
})();
Я хочу для того, чтобы как можно скорее отобразить каждую информацию. Поэтому при успешном выполнении каждого вызова ajax я обрабатываю эти данные. Вот мои проблемы:
Есть ли какие-либо улучшения в этом? могу ли я использовать promises
в этом случае? (отображение данные необходимо как можно скорее). Если да, то как и если нет, то, что лучше всего подходит для подобных вызовов.
- Примечание: рендеринг данных по успеху ajax - мой приоритет.
- Редактировать - Поддержка браузера - луч хрома, firefox и IE-11.
- Edit - по улучшению комментариев:
var array = ["mathematics.json", "science.json", "english.json"]; for (var i = 0; i < array.length; i++) { downloadAsync(array[i], renderData); } function renderData(data) { console.log(data); }
, так как вы не посылать никаких данных, что является причиной необходимости вложенных вызовов в первую очередь? Если это просто держать их в порядке, они могут отправить их раньше и использовать обещания сохранить порядок – charlietfl
Если вы просто держите порядок в том, какие данные идут туда, вы можете просто вызвать все функции ajax в простом цикле, и браузер будет стоять в очереди но они, конечно, не закончатся по порядку, вам придется оставить этот заказ самостоятельно, но это легко, даже без обещаний, просто передать индекс функции «renderData», чтобы узнать, какой запрос закончен и т. д. – adeneo
@charlietfl извините, моя ошибка, отредактировал вопрос. – Anshul