Как остановить простоя (НЕ ОТПРАВЛЕНО) XmlHttpRequests от истечения времени ожидания в IE11? - PullRequest
0 голосов
/ 23 октября 2018

Моя программа сгенерирует большое количество (тысячи) 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 не выдавал эту ошибку и не прерывал тысячи запросов.Я рассмотрел настройку менеджера / очереди для запросов, чтобы новый создавался только тогда, когда он может быть отправлен сразу или что-то в этом роде.

Кто-нибудь видел эту проблему раньше или знает о возможном обходном пути /решение?Я могу подтвердить, что это не произойдет, если я сделаю запросы синхронными, но из-за огромного количества запросов это не лучший вариант для меня.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...