Отображение сообщения о загрузке при отправке формы - проблемы с кнопкой «Назад»

Я показываю div с сообщением о загрузке и изображением при отправке формы:

$("#some_form").submit(function(){
  $("#some_form #loading").show();
});

Это работает, как я и ожидал. Но если вы используете кнопку «Назад», чтобы вернуться назад, загрузочный блок по-прежнему виден, потому что браузер не перезагрузил страницу.

Есть ли событие браузера, которое я мог бы использовать, чтобы скрыть загрузку div при использовании кнопки «Назад»? Или, может быть, я все делаю не так?

Спасибо за любую помощь!


person idlefingers    schedule 13.12.2010    source источник


Ответы (3)


Как насчет того, чтобы использовать заголовок Cache-Control: no-cache, говорящий браузеру не кэшировать исходную страницу? При переходе назад в историю следует принудительно перезагрузить страницу.

Как насчет window.onunload ?

person Rob    schedule 13.12.2010
comment
window.onunload сделал свою работу. Спасибо! - person idlefingers; 13.12.2010

Поскольку вы показываете «загружаемое» изображение, вы, вероятно, работаете с AJAX. Верно? Вы должны использовать события ajax-start и ajax-complete =)

РЕДАКТИРОВАТЬ: Вы можете попробовать:

 window.onbeforeunload = function() {

     $("#some_form #loading").hide();

 }

Или это:

http://www.bajb.net/2010/02/browser-back-button-detection/

person Icid    schedule 13.12.2010
comment
Нет, это не использование ajax. Это просто попытка компенсировать тот факт, что форма отправляет что-то, что, как мы знаем, может занять некоторое время, и мы хотим избежать отправки формы несколько раз. Я хотел не менять его, чтобы использовать ajax только для загрузки изображения, если нет другого пути. - person idlefingers; 13.12.2010
comment
onbeforeunload удаляет элемент, как и ожидалось, и поэтому останавливает изображение, когда я возвращаюсь назад, но делает это слишком рано - загрузочное изображение удаляется во время загрузки следующей страницы (поэтому оно не ведет себя как полоса загрузки). Обнаружение нажатия кнопки «Назад» было бы слишком ранним в процессе - я не хочу обнаруживать кнопку «Назад» и иметь с ней дело, мне нужна страница, на которую она возвращается, чтобы знать об этом. - person idlefingers; 13.12.2010
comment
Хм, может быть, вы должны добавить хэш к URL-адресу. Затем, когда что-то нужно загрузить, замените хэш, например, на «#loading». Вы можете обнаружить изменение следующим образом: benalman.com/projects/jquery-hashchange-plugin - person Icid; 13.12.2010
comment
Аааа, onunload вместо onbeforeunload делает свое дело! Спасибо за помощь. - person idlefingers; 13.12.2010

Вы можете добавить

<script>
$(function() { 
    $("#some_form #loading").hide(); 
});
</script>

в твоей голове. Таким образом, он скрывает div всякий раз, когда страница полностью загружается. Насколько я знаю, это также должно работать, когда нажата кнопка «Назад».

person Tjirp    schedule 13.12.2010
comment
Это то, что я сначала пробовал, но не работает, потому что браузер использует кешированную версию страницы и не полностью перезагружает страницу. - person idlefingers; 13.12.2010