Ответ 1
Установите async: true
в настройках ajax. Это заставит браузер удерживать соединение и просто закрыть после получения ответа.
У нас есть веб-приложение, работающее корректно уже более года в большинстве браузеров. Недавно мы обнаружили, что он плохо работает на Safari.
В результате многих действий появляется следующая ошибка: Failed to load resource: Request timed out
. Забавно, что действие действительно выполняется правильно после этого (большую часть времени).
Когда вы просматриваете ошибку, это происходит, когда есть запрос ajax.
Сначала я попытался изменить параметр таймаута ajax, выполнив следующие действия:
$.ajax({
"type" : methode,
"dataType" : "json",
"url" : url,
"async" : async,
"data" : donneesEnvoyees,
"timeout" : 60000
})
Это ничего не изменило, ошибка на самом деле появляется примерно через 10 секунд, что меньше заданного тайм-аута.
Прочитав немного в Интернете, я увидел некоторый ответ о том, чтобы указать отсутствие кеша, чтобы сафари не сохраняло параметры сообщения в кеше. Я не могу сказать, что я это полностью понимаю, но я все еще пробовал следующим образом:
$.ajax({
"type" : methode,
"headers" : { "cache-control": "no-cache" }, <-- added this line
"dataType" : "json",
"url" : url,
"async" : async,
"data" : donneesEnvoyees,
"timeout" : 60000
})
Как вы можете догадаться, я все равно получаю ту же ошибку.
Есть ли у вас какое-то представление о том, что происходит? Почему эта ошибка происходит только в Safari, а не в других браузерах? Как это исправить?
Установите async: true
в настройках ajax. Это заставит браузер удерживать соединение и просто закрыть после получения ответа.
У меня такая же проблема. Исправлено добавлением заголовка CORS и кода состояния ответа как 200
res.header('Access-Control-Allow-Origin', '*');
res.status(200);
Как и почему
После копания в ошибке, прочитав исходный код jQuery, я понял, что реальная проблема заключается в том, что XMLHttpRequest в jQuery + Safari вызывает onError с кодом состояния http 0
. Поэтому я добавил заголовки CORS и дал ему код состояния 200 для решения проблемы.
Я думаю, что ваша проблема будет исправлена, если вы удалите dataType : "json"
из кода , если возврат с вашей страницы ajax не является правильной строкой JSON
. Я заметил, что $.ajax()
не переходит к функции успеха, если предоставляется dataType : "json"
, а возвращаемые данные не относятся к типу JSON
.
PS
Есть определенные вещи, такие как настройки параметров AJAX type, dataType, url
и т.д., Не должны быть в двойных кавычках. Несмотря на то, что код будет работать даже с текущим способом, но правильный способ - это то, о чем я упоминал.
$.ajax({
type : methode,
dataType : "json",
url : url,
async : async,
data : donneesEnvoyees,
timeout : 60000,
success : function(data){
alert('success');
}
});
Я предполагаю, что вы добавили функцию success
с этим вызовом ajax, который вы можете использовать для использования разных действий на основе результата.
У меня та же проблема. Я пытался добавить 'async' и 'timeout', но это не помогло. Я также устал от функции setTimeout, но все равно получаю ту же ошибку.
это произошло, когда вызывали запрос ajax.
Можете ли вы сказать другое решение для этого