Как перезагрузить страницу без предупреждения 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. Затем страница результатов может быть безопасно помечена или перезагружена без неожиданных побочных эффектов.


вы не можете обновить без предупреждения; refresh указывает браузеру повторить последнее действие. Браузер должен выбрать, следует ли предупреждать пользователя, если повторение последнего действия включает повторную отправку данных.

вы можете повторно перейти на ту же страницу с новым сеансом, выполнив:

window.location = window.location.href;

У меня были некоторые проблемы с anchor/hash-urls (включая#), не перезагружая решение из Rex...

поэтому я, наконец, закончил, удалив хэш-часть:

window.location = window.location.href.split("#")[0];

чтобы обойти предупреждение POST, вы должны перезагрузить страницу с полным URL-адресом. Работать отлично.

window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;

Как насчет окна.местоположение.заменить (окно.местоположение.href);


вы можете использовать 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;

или в моем случае мне нужно было обновить самую верхнюю страницу\frame, поэтому я использовал следующую версию

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, поэтому эта "перезагрузка" не является реальной перезагрузкой, вместо этого это загрузка с другим запросом. Тем не менее, это может соответствовать вашим потребностям, как и для меня.


использование meta refresh в 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; тогда мы можем запустить db, и мы можем получить значение, но толькоJSP не обновляет eventhough скриплет, имеющий значения формы.