Отправить вызов ajax до того, как выгрузка была отменена браузером

У меня есть веб-приложение, которое требует сохранения (вызов ajax) любых несохраненных данных, вводимых пользователем, когда пользователь уходит с сайта.

Я использую «Fetch» ​​для выполнения вызова ajax (сохранения данных) в прослушивателе событий beforeunload. Но браузер, похоже, отменил вызов ajax (предварительный вызов OPTIONS был отменен, когда я посмотрел на сетевую панель Chrome).

В jquery есть способ отправить синхронный вызов ajax, но он устарел. Кроме того, можно обойтись во всплывающем окне, продиктованном браузером, чтобы пользователь мог подтвердить навигацию с помощью события beforeUnload, но это не является предпочтительным по бизнес-требованиям.

Итак, есть ли решение, позволяющее разрешить вызов Ajax?

Мой пример кода ниже. :

window.addEventListener('beforeunload', beforeUnloadHandler);

beforeUnloadHandler(event) {
    fetch(url, {
      method: 'PUT',
      credentials: 'include',
      headers: {
        'Content-Type': 'application/json',
        Authorization: api.AUTHORIZATION_HEADER
      },
      body: JSON.stringify(data)
    })
  }


person Jane    schedule 07.01.2017    source источник
comment
Дубликат? Будет ли надежно выполняться ajax in beforeunload?   -  person Felix Kling    schedule 07.01.2017
comment
Дублировать: Сохранить перед выгрузкой   -  person RamblinRose    schedule 08.01.2017
comment
@RamblinRose Спасибо. Экспериментировал в соответствии с указанным вами сообщением. Добавление setTimeout кажется хорошим решением, поскольку сохранение может произойти автоматически для пользователя, если он / она решит остаться на странице.   -  person Jane    schedule 08.01.2017


Ответы (1)


Я столкнулся с аналогичной проблемой, при настройке вызова ajax как неасинхронного, он работал отлично.

Попробуйте добавить приведенный ниже фрагмент в свой вызов ajax:

$.ajaxSetup({ cache: false })
$.ajaxSetup({ async: false })
person Maha    schedule 24.01.2018