Не удалось загрузить ресурс: время ожидания запроса в Safari

У нас есть веб-приложение, работающее корректно уже более года в большинстве браузеров. Недавно мы обнаружили, что он плохо работает на 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, а не в других браузерах? Как это исправить?

Ответы

Ответ 1

Установите async: true в настройках ajax. Это заставит браузер удерживать соединение и просто закрыть после получения ответа.

Ответ 2

У меня такая же проблема. Исправлено добавлением заголовка CORS и кода состояния ответа как 200

 res.header('Access-Control-Allow-Origin', '*');
 res.status(200);

Как и почему

После копания в ошибке, прочитав исходный код jQuery, я понял, что реальная проблема заключается в том, что XMLHttpRequest в jQuery + Safari вызывает onError с кодом состояния http 0. Поэтому я добавил заголовки CORS и дал ему код состояния 200 для решения проблемы.

Ответ 3

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

Ответ 4

У меня та же проблема. Я пытался добавить 'async' и 'timeout', но это не помогло. Я также устал от функции setTimeout, но все равно получаю ту же ошибку.

это произошло, когда вызывали запрос ajax.

Можете ли вы сказать другое решение для этого