Ошибка IE10/11 Ajax XHR - SCRIPT7002: XMLHttpRequest: ошибка сети 0x2ef3

Я работаю над этой проблемой в течение нескольких дней и занимаюсь этим форумом, так как чувствую, что исчерпал свои возможности. У меня есть форма, размещенная на веб-сайте Drupal 7, и вам нужно отправить значения формы во внешний URL. Форма использует запрос POST по протоколу HTTPS через jQuery.AJAX

  • Форма отлично работает в Chrome, Firefox и Safari.
  • Я получаю следующую ошибку в консоли IE10 + (и вызов ajax всегда переходит в функцию ошибки при использовании IE10 +):

SCRIPT7002: XMLHttpRequest: ошибка сети 0x2ef3, не удалось завершить операцию из-за ошибки 00002ef3

Я пробовал следующее:

  • Добавление contentType:

    // causes all of the jQuery callbacks to error out
    "application/json; charset=utf-8",
    
  • попытка вызова Ajax GET перед фактическим POST (как предложено в другом потоке SO)

  • добавил header( 'Content-Type: application/json; charset=utf-8' ); к запросу

  • set crossDomain: true

Добавлены соответствующие заголовки CORS и код формы будет вставлен ниже:

$.ajax({
    url: "[URL]", //the page to receive the form data  
    crossDomain: true,
    type: "POST",
    data: dataString, //posting to API 
    dataType: "json", //the data type the function should expect back from the server     
    success: function(data) {         
        if (data.response_status == "1") { //error for at least 1 field
             //display error message 
             }
             else { 
             //display thank you label next to input
             }

        } else {
           //All form fields completed successfully! Redirect user to Thank you confirmation page            
        } 
     },
    error: function(jqXHR, textStatus, errorThrown) {
             alert("there is an error!");
             console.log("in error section");
             console.log("jqXHR: " + jqXHR);
             console.log("jqXHR.responseText: " + jqXHR.responseText);
             console.log("textStatus: " + textStatus);
             console.log("errorThrown: " + errorThrown);
             data = $.parseJSON(jqXHR.responseText);
             console.log("parseJSON data: " + data);                           
    }        
    });         
  });
});

Я читал SCRIPT7002: XMLHttpRequest: ошибка сети 0x2ef3, не удалось завершить операцию из-за ошибки 00002ef3

Любое руководство было бы полезно! БЛАГОДАРЯ

Ответ 1

OP предоставил захват WireShark, показывающий, что сервер запросил сертификат, используя сообщение HTTPS CertificateRequest, и клиент, а затем сразу FIN d соединение.

После настройки сервера, чтобы не запрашивать сертификат клиента, проблема исчезла.

Использование Fiddler также устранит проблему, потому что, если вы не настроите ее на это, Fiddler никогда не будет запрашивать сертификат клиента из браузера.

Мне интересно, имеет ли только соответствующий клиентский компьютер соответствующий сертификат и/или флаг реле withCredentials в запросе CORS XHR имеет значение в этом сценарии.

Ответ 2

Я видел эту ошибку случайным образом с помощью вызовов IE 8 + 9 + 10 + 11 Ajax. У всех других браузеров не было проблем.

Предположим, что между соединениями KeepAlive было состояние гонки. Я использую Apache 2.4.7.

С настройками по умолчанию Apache 2 в файле /etc/apache 2/apache2.conf я смог воспроизвести ошибку о каждом десятом вызове Ajax:

KeepAlive On
KeepAliveTimeout 5

Решение: либо настройка

KeepAlive off

или

KeepAliveTimeout 1

решил проблему для меня. Я рекомендую всем, кто испытывает ошибку 0x2ef3-Network, чтобы кулак установить KeepAlive на сервере. Если ошибка исчезла, включите ее снова и проверьте значения KeepAliveTimeout. Они также могут быть установлены в ms.

Существует также способ отключить KeepAlive только для Internet Explorer.

Ответ 3

Я столкнулся с той же проблемой. Для меня проблема, похоже, возникала только в IE11 над почтовым вызовом, я использую провайдера AngularJS $http для совершения вызова. Кажется, что это ошибка в IE, и это проблема с сертификатом. Информация о сертификате безопасности не загружается должным образом при выполнении запроса POST. В качестве обходного пути перед выполнением вызова POST вызовите GET для правильной загрузки сертификата. Взгляните на приведенный ниже пример кода (используя AngularJS)

$http({
    method: "GET",
    url: "/api/DummyGet"
}).success(
$http({
        method: "POST",
        url: "/api/PostCall",
        data: data
})
);

Для получения дополнительной информации вы можете взглянуть на эти две ссылки - http://jonnyreeves.co.uk/2013/making-xhr-request-to-https-domains-with-winjs/
- IE10/IE11 Abort Post Ajax-запрос после очистки кэша с ошибкой и "Сетевая ошибка 0x2ef3"

Ответ 4

В моей среде я сначала скопировал/вставил некоторые старые коды, чтобы использовать их. Таким образом, "contentType" был "application/json".

Когда я узнал, что IE11 над окнами 8 НЕ работает с очень большой вероятностью, пока я нажал кнопку отправки с помощью мыши. Но я также узнал, что если бы я нажал клавишу ввода на моей клавиатуре, тогда он отлично работает с IE11.

Обратите внимание, что мои input elemnts и submit button были вложены в элемент form.

Потерпев некоторое время, я пришел на эту страницу, но не решил свою проблему, потому что я ничего не знал о бэкэнд-технологиях. Я был просто парнером с ограниченными знаниями.

Затем я пробовал много изменений один за другим. Вдруг официальные документы API jQuery вдохновили меня. Я прокомментировал параметр "contentType" , так что "contentType" принимает значение по умолчанию, которое равно "application/x-www-form-urlencoded; charset=UTF-8". Тогда проблема решена.

Надеюсь, это поможет.

Ответ 5

У меня была аналогичная ситуация, и после долгих исследований проблема была другой, но я хочу опубликовать ее здесь в надежде, что кто-то может найти ее полезной для поиска той же самой ошибки:

У Apache был тайм-аут соединения 5 секунд. Internet explorer 11 на Win 7, казалось, игнорировал тот факт, что активного сеанса больше не было, предполагая, что это будет 60 секунд. После изменения настроек Apache до таймаута 60 секунд моя проблема была решена.

Ответ 6

У меня возникла эта проблема с приложением IIS, запрос AJAX Post, который возвратил некоторый JSON, потерпел неудачу, в конечном итоге вернув прерывание, с помощью:

SCRIPT7002: XMLHttpRequest: ошибка сети 0x2ef3

ошибка в консоли. В других браузерах (Chrome, Firefox, Safari) точно такой же запрос AJAX был в порядке.

Дальнейшее исследование показало, что ответ от сервера отсутствовал в коде состояния - в этом случае он должен был иметь 500 внутренних ошибок.

Это создавалось как часть веб-приложения С# с использованием стека служб, для которого явно должен быть установлен код ошибки.

IE, казалось, оставил соединение открытым, в итоге сетевой слой закрыл его, и он "прервал" запрос; несмотря на получение содержимого и других заголовков.

Обновление веб-приложения для правильного возврата кода состояния устраняет проблему.

Возможно, есть проблема с тем, как IE обрабатывает заголовки в сообщениях.

Надеюсь, это поможет кому-то!

Ответ 7

У меня была такая же ошибка в ASP.NET MVC и, наконец, удалось обойти ее. Я создавал пару сотен встроенных форм на странице, каждый из которых имеет @Html.AntiForgeryToken(). Я считаю, что это приводит к созданию cookie на стороне клиента. Потенциально IE не хватало места для файлов cookie (или что-то, кто знает с IE). Удалили, и моя проблема исчезла.

Ответ 8

Ну, я получил ту же ошибку в IE 11. Попытка описать, что вызывало ее как можно короче.

  • показ сайта как http
  • сайт делает ajax-вызов https
  • ssl был подписан сам по себе, но браузер еще не был для него исключением.
  • После создания исключения сертификата все работает нормально.

Надеюсь, что это поможет кому-то.

Ответ 9

Мы видели ту же ошибку в IE11 и Edge. Запрос JQuery AJAX последовательно выдавал ошибку XMLHttpRequest: Network Error 0x2ef3, Could not complete the operation due to error 00002ef3. после ровно 300 секунд. (Chrome и Firefox были в порядке)

Выключено значение простоя на нашем балансировщике нагрузки (в нашем случае F5). Нам удалось диагностировать проблему с помощью Fiddler, что привело к более полезному сообщению об ошибке в браузере: Failed to load resource: the server responded with a status of 504 (Fiddler - Receive Failure) Обратите внимание, что при запуске Fiddler мы увидели эту ошибку (после 300 секунд) во всех браузерах, включая Chrome и Firefox.

Ответ 10

Просто хочу дать мне понять, в чем была причина этого вопроса для меня.

У нас есть приложение Angular2, которое вызывает наш NodeJS REST api. Остальной API затем вызывает другую службу (SOAP, я считаю).

Мы выяснили, что наша служба SOAP не имела конечной точки (?) только в одной среде (работала везде). Когда NodeJS api вызывал службу SOAP, мыльная служба возвращала сообщение об ошибке "X не является функцией". Когда ответ об ошибке был возвращен NodeJS, у него не было правильной обработки ошибок/исключений, поэтому он полностью убил службу. Таким образом, пользовательский интерфейс не получал ответа.