Мне нужно убедиться, что когда кто-то перезагрузит или закроет мою страницу, его прогресс будет сохранен.Чтобы сохранить прогресс, я делаю POST
через XMLHttpRequest()
, отправляя данные на сервер.Я запускаю эту функцию saveData()
внутри события window.onbeforeunload
.
Проблема в том, что saveData()
выполняет некоторые вычисления, а затем вызывает sendData(content)
, чтобы, наконец, на самом деле отправить данные.И если данные, которые я обрабатываю и отправляю, имеют большой размер (> 100 КБ), кажется, что окно закрывается до того, как все данные поступят на сервер.(Я отправляю изображение, и иногда я получаю только половину его на другой стороне)
HTTP-запрос является синхронным, xhr.open("POST", url, false)
, но это не похоже на его сокращение.
Итак, мой вопрос, как я могу предотвратить завершение функции onbeforeunload, ДО 1014 *?Как заставить его ждать этого события?
О, и setTimeout()
не будет работать.Окно закроется до наступления времени.
Это не сработает:
if (!jQuery) {
setTimeout(attachCode, 100);
return;
} else {
// continue and close
}
Спасибо за понимание!
PS: это не должно быть "плохой практикой", поскольку это займет всего несколькосекунд, и я не хочу, чтобы пользователь должен был сохранять вручную.Кроме того, сохранение, пока он работает (как прежде, чем он закроет окно), замедлит работу приложения, поэтому я не могу этого сделать.
[EDIT] В качестве временной меры я прибегнул к использованию этот трюк для автоматического сохранения данных, если пользователь решает остаться на странице.Тем не менее, мне бы очень хотелось, чтобы не было необходимости использовать какие-либо сообщения с предупреждениями.(