Мой скрипт совершает около 15 вызовов ajax на моем сервере. Я хочу, чтобы они выполнялись параллельно. Я пытаюсь использовать when
для выполнения параллельных запросов ajax параллельно, но по какой-то причине он по-прежнему делает их один за другим.
Мой код ниже:
var requests = $.map(results, function(result, i) {
var suggestionContainer = $('<div class="suggestion-' + i + '">' + result + '</div>');
resultsContainer.append(suggestionContainer);
return $.get('check.php', { keyword: result }).done(function(res) {
res = JSON.parse(res);
suggestionContainer.append(generateSocialMediaList(res.social_media))
.append(generateDomainList(res.domains));
}).fail(function() {
suggestionContainer.remove();
});
});
$.when(requests).done(function() {
console.log('Complete')
}, function() {
alert('Something Failed');
});
Что я делаю неправильно?
Причина, по которой я делаю 15 запросов, заключается в том, что check.php
делает вызов стороннему API. API медленный, и, к сожалению, альтернативы нет. Выполнение 15 параллельных запросов будет намного быстрее, чем 1 запрос, и дождитесь завершения check.php
.
код работает следующим образом:
- Запрос на
suggestions.php
сделан (что не включено, как это не требуется, чтобы решить эту проблему). Результаты сохраняются в массивеresults
. - Результаты (их около 15) возвращаются и повторяются с
map
. - Вставить предложение на страницу. Затем я возвращаю обещание.
requests
массив теперь содержит 10-15 обещаний.- Я использую
when
для выполнения запросов параллельно (это то, что я пытаюсь сделать как минимум). - После успеха DOM обновляется, и результаты от
check.php
вставляются в DOM.
Можете ли вы дать нам причину, по которой вы сначала запросите HTTP-запрос (не говоря о ресурсах js и css)?. – Ismail
'запросы' содержит массив' $ .get() 'ajax-запросов. Я делаю 15 запросов, потому что сервер API, мой скрипт 'php' вызывает вызовы последовательно. Они не принимают массовые запросы. API также медленный, поэтому, чтобы пользователь не дождался завершения всех 15, я делаю 15 отдельных вызовов. – BugHunterUK
@ amism Кроме того, запросы не происходят сразу. Они происходят, когда пользователь нажимает кнопку. Я включил только соответствующий код, вызывающий проблему. – BugHunterUK