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

StackOverflow https://stackoverflow.com/questions/570015

Вопрос

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

window.location.reload(true); 

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

ОБНОВЛЕННЫЙ:Я не имею никакого контроля над проектом!Я не могу обойти сам ПОСТ!

Это было полезно?

Решение

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

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

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

Другие советы

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

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

window.location = window.location.href;

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

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

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

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

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

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

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

window.location.assign(document.URL);

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

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

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

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

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

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

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

Версия 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;
<html:form name="Form" type="abc" action="abc.do" method="get" onsubmit="return false;">

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

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

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

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

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

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

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

удачи

использование обновления meta в html

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

использование meta refresh в 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 не обновляется, несмотря на то, что скрипт имеет значения формы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top