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

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

window.location.reload(true); 

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

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

17 ответов

Решение

Просто меняется 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-urls (включая #), не перезагружая, используя решение от 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

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

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

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

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

 вернуть ложь; 
является то, что ранее он рассматривал это как кнопку отправки формы. С явным возвратом false он не выполняет отправку формы, а просто выполняет перезагрузку той же страницы, которая была результатом предыдущего 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;

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

<html:form name="Form" type="abc" action="abc.do" method="get" onsubmit="return false;">

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

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

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

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

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

удачи

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

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

просто используйте location.reload(true) без "окна".

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

function refreshAndClearPost() {
    var form = document.createElement("form");
    form.method = "POST";
    form.action = location.href;
    form.style.display = "none";

    document.body.appendChild(form);
    form.submit();    //since the form is empty, it will pass empty postdata
    document.body.removeChild(form);
}

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

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

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

echo "<meta http-equiv='refresh' content='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;

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

Другие вопросы по тегам