문제

다음을 사용하여 페이지를 다시 로드하고 싶습니다.

window.location.reload(true); 

하지만 새로 고침 기능이 이전 POST 양식 데이터를 다시 보내려고 하기 때문에 POSTDATA 경고가 표시됩니다.이 경고 없이 페이지를 새로 고치려면 어떻게 해야 합니까?

업데이트됨:나는 프로젝트를 통제할 수 없습니다!POST 자체를 해결할 수는 없습니다!

도움이 되었습니까?

해결책

그냥 변화 window.location JavaScript에서 위험한 사용자가 여전히 누를 수 있기 때문입니다 뒤로 버튼 예상치 못한 결과를 가질 수있는 게시물을 다시 제출합니다 (예 : 중복 구매). PRG는 훨씬 더 나은 솔루션입니다

Post/Redirect/Get (PRG) 패턴 사용

이 문제를 피하기 위해 많은 웹 애플리케이션은 PRG 패턴을 사용합니다. HTML 페이지를 직접 반환하는 대신 Post Operation은 리디렉션 명령 (HTTP 303 응답 코드를 사용하여 HTTP "위치"응답 헤더와 함께)을 반환합니다. 브라우저에 HTTP GET 요청을 사용하여 다른 페이지를로드하도록 지시합니다. 그런 다음 결과 페이지를 예기치 않은 부작용없이 안전하게 북마크하거나 다시로드 할 수 있습니다.

다른 팁

경고 없이는 새로 고칠 수 없습니다. 새로 고침은 브라우저에 마지막 동작을 반복하도록 지시합니다. 마지막 작업을 반복하는 경우 데이터를 다시 제출하는 경우 사용자에게 경고할지 여부를 선택하는 것은 브라우저에 달려 있습니다.

새로운 세션으로 동일한 페이지로 다시 탐색 할 수 있습니다.

window.location = window.location.href;

앵커/해시 러 ( #포함)에 문제가 있었는데 렉스의 솔루션을 사용하여 다시로드하지 않았습니다 ...

그래서 나는 마침내 해시 부분을 제거하여 끝났다 :

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

Post 경고를 우회하려면 전체 URL로 페이지를 다시로드해야합니다. 잘 작동합니다.

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

Window.location.replace는 어떻습니까 (Window.location.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가 거짓으로 표시되면 양식 제출을 수행하지 않으며 해당 페이지에 대한 이전 게시물의 결과와 동일한 페이지의 재 장전 만 수행합니다.

게시물 데이터가 완료된 단계에 있고 단순히 페이지를 새롭게보고 싶다면 Window.location을 사용하고 쿼리 매개 변수로 임의의 문자열을 추가하여 새 버전의 새 버전을 보장 할 수도 있습니다. 페이지.

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

method="get" - 문제를 해결합니다.

if method="post" 그런 다음 경고 만옵니다.

게시물을 제출하지 않고 페이지를 다시 로드하는 함수를 작성했으며 해시에서도 작동합니다.

나는 다음과 같은 URL에 GET 매개변수를 추가/수정하여 이를 수행합니다. reload ms 단위의 현재 타임스탬프로 해당 값을 업데이트합니다.

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>

물론 자동 솔루션이 필요할 수도 있지만 많은 경우에 도움이 될 것입니다.

행운을 빕니다

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; 그러면 우리는 DB를 발사 할 수 있고 가치를 얻을 수는 있지만 JSP 양식 값을 갖는 스크iplet가 이벤트를 상쾌하게하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top