Как перезагрузить страницу без предупреждения POSTDATA в Javascript? - PullRequest
63 голосов
/ 20 февраля 2009

Я хочу перезагрузить страницу, используя:

window.location.reload(true); 

Но я получаю предупреждение POSTDATA, потому что функция обновления хочет отправить предыдущие данные формы POST. Как я могу обновить мою страницу без этого предупреждения?

ОБНОВЛЕНО: У меня нет контроля над проектом! Я не могу обойти сам POST!

Ответы [ 15 ]

108 голосов
/ 20 февраля 2009

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

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

window.location = window.location.href;
59 голосов
/ 20 февраля 2009

Просто изменить window.location в JavaScript опасно , поскольку пользователь все еще может нажать кнопку назад и повторно отправить сообщение, что может привести к неожиданным результатам (например, ) дубликат покупки ). PRG - намного лучшее решение

Использовать шаблон Post / Redirect / Get (PRG)

Чтобы избежать этой проблемы, многие веб-приложения используют шаблон PRG - вместо прямого возврата HTML-страницы, операция POST возвращает команду перенаправления (с использованием кода ответа HTTP 303 (иногда 302) вместе с ответом HTTP «Location»). header), инструктируя браузер загрузить другую страницу, используя HTTP-запрос GET. Страница результатов может быть безопасно добавлена ​​в закладки или загружена без неожиданных побочных эффектов.

19 голосов
/ 22 октября 2014

У меня были некоторые проблемы с повторной загрузкой якорных / хэш-URL (включая #) с использованием решения из Rex ...

Итак, я наконец удалил часть хеша:

window.location = window.location.href.split("#")[0];
12 голосов
/ 19 февраля 2013

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

window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;
5 голосов
/ 19 ноября 2010

как насчет window.location.replace (window.location.href);

3 голосов
/ 28 мая 2014

Вы можете использовать JavaScript:

window.location.assign(document.URL);

Работал для меня на Firefox и Chrome

проверьте эту ссылку: http://www.codeproject.com/Tips/433399/PRG-Pattern-Post-Redirect-Get

2 голосов
/ 22 января 2018

Это сработало

<button onclick="window.location.href=window.location.href; return false;">Continue</button>

Причина, по которой он не работал без

return false;
, заключается в том, что ранее он рассматривал это как кнопку отправки формы. С явным возвратом false он не выполняет отправку формы, а просто выполняет перезагрузку той же страницы, которая была результатом предыдущего POST на эту страницу.
2 голосов
/ 06 января 2016

Версия 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;
2 голосов
/ 20 февраля 2009

Если вы находитесь на этапе, когда вы закончили с данными публикации и просто хотите снова просмотреть страницу заново, вы можете просто использовать window.location и даже, возможно, добавить случайную строку в качестве параметра запроса, чтобы гарантировать новый версия страницы.

1 голос
/ 11 февраля 2014
<html:form name="Form" type="abc" action="abc.do" method="get" onsubmit="return false;">

method="get" - решает проблему.

if method="post" тогда приходит только предупреждение.

...