Как перезагрузить страницу без предупреждения POSTDATA в Javascript?

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

window.location.reload(true); 

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

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

+63
источник поделиться
15 ответов

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

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

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

+59
источник

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

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

window.location = window.location.href;
+107
источник
другие ответы

Связанные вопросы


Похожие вопросы

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

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

window.location = window.location.href.split("#")[0];
+19
источник

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

window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;
+12
источник

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

+5
источник

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

window.location.assign(document.URL);

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

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

+3
источник

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

+2
источник

Nikl-версия не передает параметры запроса запроса, я использовал следующую измененную версию:

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
источник

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

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

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

return false;
, заключается в том, что ранее он рассматривал это как кнопку отправки формы. С явным возвратом false он не выполняет отправку формы, а просто выполняет перезагрузку той же страницы, которая была результатом предыдущего POST на эту страницу.
+2
источник
<html:form name="Form" type="abc" action="abc.do" method="get" onsubmit="return false;">

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

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

+1
источник

Я написал функцию, которая перезагрузит страницу без отправки сообщений, и она также будет работать с хэшами.

Я делаю это, добавляя/изменяя параметр GET в URL под названием reload, обновляя его значение текущей меткой времени в мс.

var reload = function () {
    var regex = new RegExp("([?;&])reload[^&;]*[;&]?");
    var query = window.location.href.split('#')[0].replace(regex, "$1").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-адреса, поэтому эта "перезагрузка" не является реальной перезагрузкой, вместо этого она загружается с другим запросом. Тем не менее, он может соответствовать вашим потребностям, как и для меня.

0
источник

Вы не обязаны использовать JavaScript, чтобы делать все. Многие проблемы имеют простые решения, такие как эта. Вы можете использовать этот хитрый якорь:

<a href=".">Continue</a>

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

удачи

0
источник

используя мета-обновление в HTML

<meta http-equiv='refresh' content='1'>

используя метаобновление в php

echo "<meta http-equiv='refresh' content='1'>"
-1
источник

Здесь решение, которое всегда должно работать и не удаляет хэш.

let currentPage = new URL(window.location.href);
currentPage.searchParams.set('r', (+new Date * Math.random()).toString(36).substring(0, 5));
window.location.href = currentPage.href;
-1
источник

Если вы используете метод GET вместо POST тогда мы не сможем подать значения в форме. Если вы используете window.opener.location.href= window.opener.location.href; затем мы можем запустить базу данных и получить значение, но единственное, что JSP не обновляет событие, хотя сценарий имеет значения формы.

-2
источник

Посмотрите другие вопросы по меткам или Задайте вопрос