2017-01-07 5 views
0

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

Я использую «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) 
 
    }) 
 
    }

+1

Дублирование? [Будет ли выполняться ajax в beforeunload?] (Http://stackoverflow.com/q/30676368/218196) –

+0

Дубликат: [Сохранить перед выгрузкой] (http://stackoverflow.com/questions/24324365/save-before-unload) – RamblinRose

+1

@RamblinRose Спасибо. Экспериментировал в соответствии с сообщением, которое вы упомянули. Добавление setTimeout кажется хорошей работой, поскольку сохранение может произойти «автоматически» для пользователя, если он/она решит остаться на странице. – Jane

ответ

0

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

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

$.ajaxSetup({ cache: false }) 
$.ajaxSetup({ async: false })