Моя программа сгенерирует большое количество (тысячи) URL-адресов контента, которые затем будет циклически повторяться, и сделает для каждого запрос ajax GET.
Проблема, с которой я сталкиваюсь, заключается в том, что IE может работать только с6 запросов за раз, поэтому остальные застревают с readyState = "UNSENT".Это только проблематично, потому что некоторые из этих запросов могут занимать минуты, в то время как другие - только секунды.
Каждый раз, когда моя программа запускается, прямо на отметке 300 секунд, все НЕПРАВИЛЬНЫЕ запросы XHR будут задерживаться и выдают ошибкув консоли: XMLHttpRequest: Network Error 0x2ee2, Could not complete the operation due to error 00002ee2.
.Изучив эту ошибку, я заметил, что это, по сути, сетевой тайм-аут.
Несколько вещей, которые я попробовал и подтвердил после большого тестирования:
- Это строго происходит в IE11 (протестировано в Chrome и хорошо работает)
- Я попытался установить тайм-ауты, превышающие 300 секунд, в нескольких различных формах / способах.Все они выполняли только отдельные вызовы Ajax, то есть, если один из них запустился и занял больше времени, чем мой тайм-аут (скажем, десять минут), то истекло бы время ожидания, но запросы UNSENT по-прежнему останавливаются через пять минут.
- Также попытался установитьтайм-аут до 0, без эффекта (все еще выбрасывал НЕПРАВИЛЬНЫЕ запросы через 300 секунд)
Попытка 1
sContentUrls.forEach(function( sContentUrl ) {
$.get({
url: sContentUrl,
timeout: 600000,
error: function() {
},
success: function() {
console.log("Success");
},
async: true
});
});
Попытка 2
sContentUrls.forEach( function( sContentUrl ) {
var xhr = new XMLHttpRequest();
xhr.open("GET", sContentUrl, true);
xhr.onreadystatechange = function(){
if (xhr.readyState === 4 && xhr.status === 200){
console.log("Success");
}
};
xhr.onprogress = function(){ };
xhr.ontimeout = function(){ };
xhr.onerror = function () { };
setTimeout(function(){
xhr.send();
}, 0);
});
Мне интересночто я могу сделать, чтобы IE11 не выдавал эту ошибку и не прерывал тысячи запросов.Я рассмотрел настройку менеджера / очереди для запросов, чтобы новый создавался только тогда, когда он может быть отправлен сразу или что-то в этом роде.
Кто-нибудь видел эту проблему раньше или знает о возможном обходном пути /решение?Я могу подтвердить, что это не произойдет, если я сделаю запросы синхронными, но из-за огромного количества запросов это не лучший вариант для меня.
Спасибо!