У нас есть фрагмент кода, который загружает несколько файлов на сервер, что интересно, этот код отлично работает в Chrome и Mozilla, но не работает в Internet Explorer, получая следующую ошибку
XMLHttpRequest: сетевая ошибка 0x2ee2, не удалось завершить операцию из-за ошибки 00002ee2
Мы пробовали решения, упомянутые в SCRIPT7002: XMLHttpRequest: Network Error 0x2ef3 , Не удалось завершить операцию из-за ошибки 00002ef3, но по-прежнему возникает аналогичная проблема
Мы изменили значение тайм-аута для Internet Explorer, используя следующие это руководство, но оно бесполезно.
Находим строку кода, вызывающую проблему
///////////////////////////////////////////////////////////////////////
// Private Helper for making servlet calls
_servercall: function(urlStr, input, isAsync, dataT, ajaxcallback) {
// Using the core $.ajax method
$.ajax({
// the URL for the request
url : urlStr,
async : isAsync,
// the data to send (will be converted to a query string)
data : input,
// whether this is a POST or GET request
type : "GET",
// the type of data we expect back
dataType : dataT,
// code to run if the request succeeds;
// the response is passed to the function
success : function(json) {
console.log("Server call - Success");
ajaxcallback(json);
},
// code to run if the request fails; the raw request and
// status codes are passed to the function
// This needs to be better handled, more graceful error, ToDo
error : function(xhr, status) {
console.log("Server call - error. Status " + status);
JCAAlert("com.ptc.windchill.enterprise.attachments.attachmentsResource.DO_APPLET_UPLOAD_ERROR");
this.cleanupUploadFields(this.wizardStep, null);
},
// code to run regardless of success or failure
complete : function(xhr, status) {
console.log("The request is complete! Status " + status);
}
});
},
Этот код работает нормально до файла номер 12 в IE, но как только мы выберем более 12 файлов, он выйдет из строя с указанной выше ошибкой?
Это ограничение ajax или что-то в этом роде?
1 ответ
Лучший ответ
AJAX Error:
XMLHttpRequest: Network Error 0x2ee2, Could not complete the operation due to error 00002ee2
Js Code:
$.ajax({
type: 'POST',
url: 'ImportDataDataFileUpload',
data: JSON.stringify({ positionDate: positionDate }),
dataType: "text",
contentType: "application/json; charset=utf-8",
beforeSend: function () { lpImport.Show(); },
success: function (msg) {
console.log(msg);
ImportDataGridView.PerformCallback();
ImportSuccessMessage.SetVisible(true);
ImportSuccessMessage.SetText(msg);
lpImport.Hide();
},
error: function (xhr, textStatus, errorThrown) {
console.log(xhr);
console.log(textStatus);
console.log(errorThrown);
ImportSuccessMessage.SetText(errorThrown);
ImportDataGridView.PerformCallback();
}
});
Results:
The Debugger yields:
errorThrown
is""
textStatus
is"error"
.
Screenshot:
My Controller:
[HttpPost]
public ActionResult DataFileUpload(string positionDate)
{
// Reset validation error collection
ImportDataValidationErrors = new List<ImportFileRecord>();
string[] errs;
try
{
Dictionary<string, double> retDictAPI = new Dictionary<string, double>();
DateTime dateValue;
DateTime.TryParse(positionDate, out dateValue);
var HoldAPI = "SomeAPI";
retDictAPI = ProcessImportFileAPI(HoldAPI);
string ReturnVal = "Import is successful";
return Content(ReturnVal);
}
}
Any idea what am I doing wrong here? Thanks for the help.
AJAX Error:
XMLHttpRequest: Network Error 0x2ee2, Could not complete the operation due to error 00002ee2
Js Code:
$.ajax({
type: 'POST',
url: 'ImportDataDataFileUpload',
data: JSON.stringify({ positionDate: positionDate }),
dataType: "text",
contentType: "application/json; charset=utf-8",
beforeSend: function () { lpImport.Show(); },
success: function (msg) {
console.log(msg);
ImportDataGridView.PerformCallback();
ImportSuccessMessage.SetVisible(true);
ImportSuccessMessage.SetText(msg);
lpImport.Hide();
},
error: function (xhr, textStatus, errorThrown) {
console.log(xhr);
console.log(textStatus);
console.log(errorThrown);
ImportSuccessMessage.SetText(errorThrown);
ImportDataGridView.PerformCallback();
}
});
Results:
The Debugger yields:
errorThrown
is""
textStatus
is"error"
.
Screenshot:
My Controller:
[HttpPost]
public ActionResult DataFileUpload(string positionDate)
{
// Reset validation error collection
ImportDataValidationErrors = new List<ImportFileRecord>();
string[] errs;
try
{
Dictionary<string, double> retDictAPI = new Dictionary<string, double>();
DateTime dateValue;
DateTime.TryParse(positionDate, out dateValue);
var HoldAPI = "SomeAPI";
retDictAPI = ProcessImportFileAPI(HoldAPI);
string ReturnVal = "Import is successful";
return Content(ReturnVal);
}
}
Any idea what am I doing wrong here? Thanks for the help.
Вопрос:
У меня есть запрос ajax POST, который может занимать от 2 секунд до 30 + минут. Запрос на отправку происходит в результате нажатия кнопки
Если запрос занимает менее минуты или двух, он возвращается с ответом, и все работает нормально. Однако, если запрос занимает более двух минут, он возвращается с “Ошибка сети: XMLHttpRequest: Ошибка сети 0x2eff, не удалось завершить операцию из-за ошибки 00002eff”.
Конечно, он отлично работает Firefox и Chrome.
Приложение развертывается на сервере JBoss с включенным SSL. Архитектура здесь заключается в том, что у нас есть балансировщик нагрузки, который направляет запрос на два сервера Jboss.
Internet Explorer
Версия: 11.0.9600.180971C
Обновление: 11.0.25
Я пробовал следующее, но тщетно
1) ajax set cache to false – не работает
2) Изменены настройки реестра в соответствии с https://support.microsoft.com/en-us/kb/813827 – не работает, вот где это запутывает, thissuggests это не вещь IE, но в то же время это работает на chrome и ff, поэтому это не серверная вещь
3) Установите тайм-аут ajax на 0 – не работает
4) Добавлен e.preventDefault после $(‘# mdlSgn’). Click (function() {as jQuery Запросы Ajax отменяются без отправки
$('#mdlSgn').click(function() {
$('#cnfdsgl').modal('hide');
$.ajax({
url: ajaxUrl,
type: "POST",
data: JSON.stringify(input),
contentType: "application/json; charset=UTF-8",
dataType: "json",
success: function(data) {
/// some logic
},
error : function(jqXhr, textStatus, errorThrown) {
/// some logic
}
});
//some other logic
});
Ответ №1
может занимать от 2 до 30 минут
Я предполагаю, что это связано с большим объемом передаваемых данных.
У меня есть большой файловый загрузчик, который обрабатывает файлы размером 20 ГБ + и может длиться несколько часов.
По моему опыту – загрузка больших данных с помощью одного запроса ajax может вызвать странные сбои браузера (например, мой браузер Chrome сбой примерно в 20% тестов загрузки).
Самый надежный способ, который я нашел, – разделить данные на куски 1 МБ и отправить их последовательно на сервер с помощью отдельных запросов ajax.
Ответ №2
Мы проводим несколько дней в поисках причины этой проблемы!
- В консоли: SCRIPT7002: XMLHttpRequest: Сетевая ошибка 0x2eff. Не удалось завершить операцию из-за ошибки 00002eff.
- На вкладке сети IE/Edge мы видим неудавшийся запрос как “Ожидание…”
- XmlHTTPRequest/JQuery возвращает ошибку 404 на клиенте, но сервер успешно возвратил ответ 200.
У нас была эта проблема только при использовании всего этого:
- HTTP/2
- POST-запросы
- Windows 10
- IE или Edge
По-видимому, это ошибка Windows 10 в стеке HTTP, которая теперь решается в Windows 10 версии 1803 (апрель 2018 года). Поэтому обычно эта проблема исчезает со временем для людей/компаний, использующих автоматические обновления Windows. Используется Windows 10 версии WorldWide
Мы проверили это на более старой и новой версии Windows 10, и она действительно решена.
Некоторое временное решение может быть:
- отключите HTTP/2 для IE и Edge и используйте HTTPS (на стороне сервера).
- используйте GET (если возможно)
- PUT также имеет эту проблему?
- сделать несколько попыток
- принять, что пользователи IE/Edge будут наказаны 😉
Ответ №3
В моем случае это был пользовательский код ответа (3020), возвращенный с сервера. Переключил его на 200 и изменил логику клиента SPA, это решило проблему.
Интернет в нашей организации работает через прокси,
Сейчас используем компоненту версии 5.29.7.549 — проблем нет.
Решил проверить новую 5.33.6.682 — не работает
TestConnection2 выдает ErrorText = WIN32[0x00002EE2]WinHttpSendRequest
Как только включаем прямой доступ к diadoc-api.kontur.ru — работает.
Ошибка в компоненте?
Скорее нет, чем да
0x2ee2 — таймаут соединения. Почему он возникает, сложно сказать без знания настроек компа, настроек прокси-сервера, настроек подключения компоненты
Вероятнее, что неправильно указаны настройки прокси в компоненте
Скорее нет, чем да
0x2ee2 — таймаут соединения. Почему он возникает, сложно сказать без знания настроек компа, настроек прокси-сервера, настроек подключения компоненты
Вероятнее, что неправильно указаны настройки прокси в компоненте
А там есть возможность настроек прокси? Как?
У корневого объекта есть поля:
* ProxyMode * ProxySettings * AutoLogonPolicy
Спасибо. По-умолчанию стояло «UseDefaultProxy».
Поменял на «UseProxy» и указал адрес для нашей сети «proxy.local:8080» (без авторизации) — только тогда заработало.
Остаётся вопрос: почему при «UseDefaultProxy» не работает?
Для ответа на вопрос нам понадобятся:
- Лог WinHttp (как собрать), когда настройка в компоненте выставлена в UseDefaultProxy
- Номер диагностики
Для ответа на вопрос нам понадобятся:
* Лог WinHttp ([как собрать](https://docs.microsoft.com/en-us/windows/win32/wsdapi/capturing-winhttp-logs)), когда настройка в компоненте выставлена в UseDefaultProxy * Номер [диагностики](https://help.kontur.ru/diadoc)
Номер диагностики — 21505708
А с логами WinHttp проблема на Win 10.
Инструкция по указанной ссылке приводит к такому результату
«Используйте команду netsh trace start scenario=InternetClient»
Гугл не очень помог.
После netsh trace start scenario=InternetClient формируется etl страшного размера.
Пробовал открывать через Microsoft Network Monitor — не нашел сходу логов WinHttp.
Подскажете, как на Win10 собрать логи WinHttp ?
Попробуем без логов исправить. Спасибо
I have an ajax POST request that can take anywhere between 2 seconds to 30+ minutes. The post request occurs as a result of button click
If the request takes less than a minute or two, it comes back with a response and everything works fine. However if the request takes longer than two minutes it comes back with «Network error: XMLHttpRequest: Network Error 0x2eff, Could not complete the operation due to error 00002eff».
Ofcourse, it works fine Firefox and Chrome.
The application is deployed on a JBoss server with SSL enabled. The architecture here is that we have a load balancer that routes the request to two Jboss servers.
Internet Explorer
Version: 11.0.9600.180971C
Update: 11.0.25
I have tried the following but in vain
$('#mdlSgn').click(function() {
$('#cnfdsgl').modal('hide');
$.ajax({
url: ajaxUrl,
type: "POST",
data: JSON.stringify(input),
contentType: "application/json; charset=UTF-8",
dataType: "json",
success: function(data) {
/// some logic
},
error : function(jqXhr, textStatus, errorThrown) {
/// some logic
}
});
//some other logic
});
AJAX Error:
XMLHttpRequest: Network Error 0x2ee2, Could not complete the operation due to error 00002ee2
Js Code:
$.ajax({
type: 'POST',
url: 'ImportDataDataFileUpload',
data: JSON.stringify({ positionDate: positionDate }),
dataType: "text",
contentType: "application/json; charset=utf-8",
beforeSend: function () { lpImport.Show(); },
success: function (msg) {
console.log(msg);
ImportDataGridView.PerformCallback();
ImportSuccessMessage.SetVisible(true);
ImportSuccessMessage.SetText(msg);
lpImport.Hide();
},
error: function (xhr, textStatus, errorThrown) {
console.log(xhr);
console.log(textStatus);
console.log(errorThrown);
ImportSuccessMessage.SetText(errorThrown);
ImportDataGridView.PerformCallback();
}
});
Results:
The Debugger yields:
errorThrown
is""
textStatus
is"error"
.
Screenshot:
My Controller:
[HttpPost]
public ActionResult DataFileUpload(string positionDate)
{
// Reset validation error collection
ImportDataValidationErrors = new List<ImportFileRecord>();
string[] errs;
try
{
Dictionary<string, double> retDictAPI = new Dictionary<string, double>();
DateTime dateValue;
DateTime.TryParse(positionDate, out dateValue);
var HoldAPI = "SomeAPI";
retDictAPI = ProcessImportFileAPI(HoldAPI);
string ReturnVal = "Import is successful";
return Content(ReturnVal);
}
}
Any idea what am I doing wrong here? Thanks for the help.
В веб-версии skype (в IE11 или Edge) кратковременно происходит переключение статуса на оффлайн.
Используется Windows 10 1709.
В консоли разработчика (по нажатии F12) можно видеть повторяющиеся ошибки:
SCRIPT7002: XMLHttpRequest: Сетевая ошибка 0x2ee2, Не удалось завершить действие. Ошибка 00002ee2
А в той же консоли на вкладке сеть видно, что не удается получить ответ от следующего узла:
Имя Протокол Метод Результат Тип содержимого Получено Время Инициатор
https://db4-client-s.gateway.messenger.live.com/v1… POST null 0 с XMLHttpRequest
Скриншоты ошибки
Видимо, причина этой проблемы мешает же мне использовать web-клиент Skype for business в котором так же постоянно теряется связь с сервером при подключении к конференции. Кстати, в нём соединение идет только через протокол TCP, хотя должно и через UDP, насколько я знаю.
Под другим пользователем на том же ПК проблема не воспроизводится.
На соседнем компьютере с Windows 10 1803 в одной сети проблема не воспроизводится.
На многих ПК в корпоративной сети те же симптомы на win 10 и win 7.
Безуспешные попытки разобраться
Проблема осталась и при подключении через разные каналы интернет.
В режиме чистой загрузки так же возникает проблема.
Пробовал сбрасывать сетевые интерфейсы (netsh winsock reset), чистил кэш DNS.
Сбрасывал настройки IE.
Переносил настройки IE с ПК где проблемы нет.
Обновлял, удалял приложения Skype.
Просил помощи у MS Community тут1(ru) и тут2(en)
Прошу помочь разобраться с данной проблемой.
Спасибо.
AJAX Error:
XMLHttpRequest: Сетевая ошибка 0x2ee2, Не удалось завершить операцию из-за ошибки 00002ee2
Js Code:
$.ajax({
type: 'POST',
url: 'ImportDataDataFileUpload',
data: JSON.stringify({ positionDate: positionDate }),
dataType: "text",
contentType: "application/json; charset=utf-8",
beforeSend: function () { lpImport.Show(); },
success: function (msg) {
console.log(msg);
ImportDataGridView.PerformCallback();
ImportSuccessMessage.SetVisible(true);
ImportSuccessMessage.SetText(msg);
lpImport.Hide();
},
error: function (xhr, textStatus, errorThrown) {
console.log(xhr);
console.log(textStatus);
console.log(errorThrown);
ImportSuccessMessage.SetText(errorThrown);
ImportDataGridView.PerformCallback();
}
});
Результаты:
Отладчик выдает:
errorThrown
is"""
.textStatus
—"ошибка"
.
Скриншот:
Мой контроллер:
[HttpPost]
public ActionResult DataFileUpload(string positionDate)
{
// Reset validation error collection
ImportDataValidationErrors = new List<ImportFileRecord>();
string[] errs;
try
{
Dictionary<string, double> retDictAPI = new Dictionary<string, double>();
DateTime dateValue;
DateTime.TryParse(positionDate, out dateValue);
var HoldAPI = "SomeAPI";
retDictAPI = ProcessImportFileAPI(HoldAPI);
string ReturnVal = "Import is successful";
return Content(ReturnVal);
}
}
Есть идеи, что я делаю не так? Спасибо за помощь.
Вопрос:
У меня есть запрос ajax POST, который может занимать от 2 секунд до 30 + минут. Запрос на отправку происходит в результате нажатия кнопки
Если запрос занимает менее минуты или двух, он возвращается с ответом, и все работает нормально. Однако, если запрос занимает более двух минут, он возвращается с “Ошибка сети: XMLHttpRequest: Ошибка сети 0x2eff, не удалось завершить операцию из-за ошибки 00002eff”.
Конечно, он отлично работает Firefox и Chrome.
Приложение развертывается на сервере JBoss с включенным SSL. Архитектура здесь заключается в том, что у нас есть балансировщик нагрузки, который направляет запрос на два сервера Jboss.
Internet Explorer
Версия: 11.0.9600.180971C
Обновление: 11.0.25
Я пробовал следующее, но тщетно
1) ajax set cache to false – не работает
2) Изменены настройки реестра в соответствии с https://support.microsoft.com/en-us/kb/813827 – не работает, вот где это запутывает, thissuggests это не вещь IE, но в то же время это работает на chrome и ff, поэтому это не серверная вещь
3) Установите тайм-аут ajax на 0 – не работает
4) Добавлен e.preventDefault после $(‘# mdlSgn’). Click (function() {as jQuery Запросы Ajax отменяются без отправки
$('#mdlSgn').click(function() {
$('#cnfdsgl').modal('hide');
$.ajax({
url: ajaxUrl,
type: "POST",
data: JSON.stringify(input),
contentType: "application/json; charset=UTF-8",
dataType: "json",
success: function(data) {
/// some logic
},
error : function(jqXhr, textStatus, errorThrown) {
/// some logic
}
});
//some other logic
});
Ответ №1
может занимать от 2 до 30 минут
Я предполагаю, что это связано с большим объемом передаваемых данных.
У меня есть большой файловый загрузчик, который обрабатывает файлы размером 20 ГБ + и может длиться несколько часов.
По моему опыту – загрузка больших данных с помощью одного запроса ajax может вызвать странные сбои браузера (например, мой браузер Chrome сбой примерно в 20% тестов загрузки).
Самый надежный способ, который я нашел, – разделить данные на куски 1 МБ и отправить их последовательно на сервер с помощью отдельных запросов ajax.
Ответ №2
Мы проводим несколько дней в поисках причины этой проблемы!
- В консоли: SCRIPT7002: XMLHttpRequest: Сетевая ошибка 0x2eff. Не удалось завершить операцию из-за ошибки 00002eff.
- На вкладке сети IE/Edge мы видим неудавшийся запрос как “Ожидание…”
- XmlHTTPRequest/JQuery возвращает ошибку 404 на клиенте, но сервер успешно возвратил ответ 200.
У нас была эта проблема только при использовании всего этого:
- HTTP/2
- POST-запросы
- Windows 10
- IE или Edge
По-видимому, это ошибка Windows 10 в стеке HTTP, которая теперь решается в Windows 10 версии 1803 (апрель 2018 года). Поэтому обычно эта проблема исчезает со временем для людей/компаний, использующих автоматические обновления Windows. Используется Windows 10 версии WorldWide
Мы проверили это на более старой и новой версии Windows 10, и она действительно решена.
Некоторое временное решение может быть:
- отключите HTTP/2 для IE и Edge и используйте HTTPS (на стороне сервера).
- используйте GET (если возможно)
- PUT также имеет эту проблему?
- сделать несколько попыток
- принять, что пользователи IE/Edge будут наказаны 😉
Ответ №3
В моем случае это был пользовательский код ответа (3020), возвращенный с сервера. Переключил его на 200 и изменил логику клиента SPA, это решило проблему.