Как перезагрузить страницу без предупреждения POSTDATA в Javascript?
Я хочу перезагрузить страницу с помощью:
window.location.reload(true);
но я получаю предупреждение POSTDATA, потому что функция обновления хочет повторно отправить предыдущие данные формы POST. Как я могу обновить свою страницу без этого предупреждения?
обновлено: у меня нет контроля над проектом! Я не могу обойти сам пост!
13 ответов:
просто меняется
window.locationв JavaScript опасно потому что пользователь все-таки мог ударить назад и повторно отправить сообщение, которое может иметь неожиданные результаты (например,дублировать покупки). PRG-это гораздо лучшее решениеиспользуйте шаблон Post/Redirect/Get (PRG)
чтобы избежать этой проблемы, многие веб-приложения используют шаблон PRG-вместо прямого возврата HTML-страницы Операция POST возвращает команду перенаправления (используя код ответа HTTP 303 (иногда 302) вместе с заголовком ответа HTTP "Location"), указывая браузеру загрузить другую страницу с помощью запроса HTTP GET. Затем страница результатов может быть безопасно заложена или перезагружена без неожиданных побочных эффектов.
вы не можете обновить без предупреждения; обновление указывает браузеру повторить последнее действие. Это до браузера, чтобы выбрать, следует ли предупредить пользователя, если повторение последнего действия включает повторную отправку данных.
вы можете повторно перейти на ту же страницу с новым сеансом, выполнив:
window.location = window.location.href;
У меня были некоторые проблемы с anchor/hash-url (включая #) не перезагружая с помощью решения от Rex...
Так что я, наконец, закончил, удалив хэш-часть:
window.location = window.location.href.split("#")[0];
чтобы обойти предупреждение POST, вы должны перезагрузить страницу с полным URL. Работать отлично.
window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;
вы можете использовать JavaScript:
window.location.assign(document.URL);работал для меня на Firefox и Chrome
проверьте эту ссылку:http://www.codeproject.com/Tips/433399/PRG-Pattern-Post-Redirect-Get
Если вы находитесь на этапе, когда вы закончили с данными post и просто хотите снова просмотреть страницу, вы можете просто использовать окно.расположение и даже, возможно, добавить случайную строку в качестве параметра запроса, чтобы гарантировать новую версию страницы.
версия Nikl не передает параметры запроса get, я использовал следующую измененную версию:
window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname + window.location.search;или в моем случае мне нужно было обновить самую верхнюю страницу\фрейм, поэтому я использовал следующую версию
window.top.location.href = window.top.location.protocol +'//'+ window.top.location.host + window.top.location.pathname + window.top.location.search;
он работал
<button onclick="window.location.href=window.location.href; return false;">Continue</button>причина, по которой он не работал без
return false;это то, что ранее он рассматривал это как кнопку отправки формы. С явным возвращением false на нем он не выполняет отправку формы и просто выполняет перезагрузку той же страницы, которая была результатом предыдущего сообщения на этой странице.
<html:form name="Form" type="abc" action="abc.do" method="get" onsubmit="return false;">
method="get"- решает проблему.
if method="post"тогда приходит только предупреждение.
Я написал функцию, которая будет перезагружать страницу без отправки сообщений, и она также будет работать с хэшами.
Я делаю это, добавляя / изменяя параметр GET в URL с именем
reloadпутем обновления его значения с текущей меткой времени в МС.var reload = function () { var regex = new RegExp("([?;&])reload[^&;]*[;&]?"); var query = window.location.href.split('#')[0].replace(regex, "").replace(/&$/, ''); window.location.href = (window.location.href.indexOf('?') < 0 ? "?" : query + (query.slice(-1) != "?" ? "&" : "")) + "reload=" + new Date().getTime() + window.location.hash; };имейте в виду, если вы хотите запустить эту функцию в атрибуте href, реализуйте ее следующим образом:
href="javascript:reload();void 0;"чтобы заставить его работать, успешно.недостатком моего решения является то, что он изменит URL, поэтому эта "перезагрузка" не является реальной перезагрузкой, вместо этого это загрузка с другим запросом. Еще, это может соответствовать вашим потребностям, как это делает для меня.
использование мета обновления в html
<meta http-equiv='refresh' content='1'>использование meta refresh в php
echo "<meta http-equiv='refresh' content='1'>"
если вы используете
GETвместоPOSTтогда мы не можем форму подали значения. Если вы используетеwindow.opener.location.href = window.opener.location.href;тогда мы можем запустить БД, и мы можем получить значение, но только этоJSP- это не освежает, несмотря на то, что сценариями имеющие значения форме.
Comments