programing

브라우저:JavaScript만 사용하여 새로 고침 시 POST 데이터 재제출 방지

lastmemo 2023. 3. 7. 21:02
반응형

브라우저:JavaScript만 사용하여 새로 고침 시 POST 데이터 재제출 방지

Post/Redirect/Get에 관한 많은 질문을 알고 있습니다.이건 좀 달라요.이 특정 JavaScript 솔루션을 설명하는 답변을 찾을 수 없습니다.

POST를 통해 폼을 전송한 후 새로 고침 버튼을 누르면 브라우저에 데이터를 다시 전송하라는 메시지가 나타납니다.그러나 이 프롬프트는 WordPress 백엔드(JS가 활성화된 경우)에서 발생하지 않으며 POST 후에 Redirect/Get이 표시되지 않습니다.

저는 이걸 아래 스크린샷으로 보여드리려고 노력했어요.페이지상에 POST 데이터가 인쇄된 최초의 POST 송신지가 표시되고, 그 후 새로고침에 의해 브라우저의 재송신 프롬프트가 표시되지 않고 GET이 발생합니다.

브라우저가 투고 없이 다시 제출하다

JavaScript를 비활성화하고 refresh를 누르면 예상된 "Would you like to resubmit your data?" 프롬프트가 표시되고 새로 고침으로 인해 두 번째 POST가 발생합니다.

js 디세이블, 통상적인 재발송신 후가 발생한다.

따라서 워드프레스는 새로 고침/돌아가기 버튼에서 POST 데이터가 다시 제출되는 것을 방지하기 위해 JavaScript 마법을 실행하고 있습니다.

JavaScript만으로 이것을 실현하는 방법을 나타내는 WordPress의 코드를 가르쳐 주실 수 있습니까?어디서부터 찾아야 할지 모르겠어요.

푸시스테이트에 무슨 조치를 취했나요?

감사합니다!

솔루션:WordPress의 용도window.history.replaceState모든 페이지를 로드합니다.

이로 인해,POST새로 고침 또는 뒤로 버튼으로 다시 실행할 수 없습니다.

니프티!

WordPress 이외의 개념 실증: https://dtbaker.net/files/prevent-post-resubmit.php

코드는 다음과 같습니다.

<script>
    if ( window.history.replaceState ) {
        window.history.replaceState( null, null, window.location.href );
    }
</script>

언급URL : https://stackoverflow.com/questions/45656405/browser-prevent-post-data-resubmit-on-refresh-using-only-javascript

반응형