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



Я хочу перезагрузить страницу с помощью:



window.location.reload(true); 


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



обновлено: у меня нет контроля над проектом! Я не могу обойти сам пост!

535   13  

13 ответов:

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

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

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

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

Comments

    Ничего не найдено.