Проблема с отправкой формы на window.unload - PullRequest
1 голос
/ 09 ноября 2010

У меня проблема с отправкой формы при выгрузке окна, если информация формы была обновлена ​​(album.updated = true):

window.onunload = function(evnt) {
  if (album.updated) {
    var save = confirm('Do you want to save changes?');
    if (save) {
      alert('submitting form...');
      document.edit_photos.submit();
    }
  }
}

Предупреждает "отправка формы", но ничего не сохраняется. Но когда я делаю регулярную отправку с кнопкой Сохранить - это сохраняет информацию. Что здесь может быть не так?

Ответы [ 2 ]

3 голосов
/ 09 ноября 2010

Вы не можете надежно взаимодействовать с сервером из события unload.

Отправка запроса AJAX может быть немного более надежной, но на нее также не следует полагаться.

Вместо этого вы должны обработать событие onbeforeunload и return "You have unsaved changes";.
. Это заставит браузер показать диалоговое окно подтверждения, позволяющее пользователю отменить навигацию.(После чего он может сохранить вручную)

2 голосов
/ 09 ноября 2010

Вы ничего не можете сделать на unload.Когда-то было разрешено больше, но плохие сайты использовали для захвата и запутывания пользователя, поэтому это было заблокировано.

Единственное взаимодействие, которое вы можете получить, - это onbeforeunload.И вы также не можете достоверно запросить сохранение здесь ... как правило, вы не можете обойти навигацию, отправив форму напрямую.Вы можете попробовать опубликовать запрос на сохранение, используя XMLHttpRequest, но нет никакой гарантии, что он достигнет сервера до того, как страница уйдет.

Так что все, что вы можете разумно сделать, это предупредить пользователя о несохраненных данных, запросивих отменить навигацию и сохранить сами данные:

window.onbeforeunload= function() {
    if (album.updated)
        return (
            'You have unsaved changes to this album. Are you sure you wish '+
            'to leave without saving?'
        );
};
...