2012-11-30 3 views
5

현재 HTTP POST 양식 및 히스토리 푸시 스테이트에 약간의 문제가 있습니다.history.pushstate 및 HTTP POST 양식 재 게시

내 사용자가 example.com/page-1에 POST 양식을 제출하고이 페이지 내의 링크를 클릭하면 history.pushstate가있는 example.com/page-2으로 리디렉션됩니다. JS 스크립트는 현재 URL을 변경하고 기록을 이전 URL로 푸시 한 다음 새 콘텐츠를 표시합니다. 이것은 나를 위해 완벽하게 작동합니다.

문제 : 사용자가 example.com/page-2에 있고 수동으로 페이지 (CTRL + R 또는 새로 고침 버튼)을 갱신하면,의 Chromes 다시 양식을 제출하라는 메시지를 표시합니다; 그러나이 양식은 실제로 example.com/page-1에 있었으며이 "새로운"페이지에서 다시 질문 할 이유가 없습니다.

브라우저에서 재 게시 프롬프트를 방지하기 위해 팝업 상태에서 자바 스크립트로 이전에 제출 한 모든 데이터를 지울 수있는 방법이 있습니까? 아니면 내 역사 국가에서 뭔가를 놓치고 있습니까? 또는 브라우저에서 현재 아직 구현되지 않은 기능입니까?

다른 브라우저에서 푸시 스테이트를 구현하지 않았기 때문에 크롬으로 만 테스트했습니다.

답변

1

대신 replaceState를 시도해보십시오. this을 참조하십시오.

replaceState() 방법

history.replaceState()는 정확히 replaceState 제외 history.pushState()처럼 작동 새로 만드는 대신 전류 이력 엔트리를 수정한다.

replaceState()는 일부 사용자 작업에 대한 응답으로 현재 기록 항목의 상태 개체 또는 URL을 업데이트하려는 경우 특히 유용합니다.

+0

안녕하세요, replaceState와 동일한 문제가 있습니다. 문제는 Ajax를 통해 양식을 보내드립니다. 나는 자바 스크립트 history.pushstate를 사용하여 아약스를 통해 폼을 보내지 않고 replacestate하는 것은 jquery, mootools 등을 사용하여 꽤 쉽게 할 수있는 좋은 일이 아니라는 것을 추측한다. – pafounet

0

동일한 문제가 있습니다. BackboneJS과 함께 기록 API를 사용하고 있습니다.

내가 생각한 솔루션은 로그인 한 후 양식이 리디렉션되는 중간 페이지를 갖는 것입니다.이 중간 페이지의 목적은 대상 페이지 앞에 비 POST 페이지를 추가하여 브라우저가 양식을 다시 제출하라는 메시지가 표시됩니다 (중복 항목을 추가하지 않으려면 Chrome 용). 귀하의 예를 들어

example.com/page-1에 POST 양식을 제출 한 후 서버는 사용자 자격 증명이 있는지 확인 할 수 example.com/page-1a

example.com/page-1a로 사용자를 리디렉션해야하고 example.com/page-2로 리디렉션. 이것은 당신의 문제를 해결할 것이라고 나는 믿는다.

리디렉션 메커니즘에 대하여,

, 내가 생각할 수있는 3 가지 옵션이 있습니다 :

  1. 서버 측 리디렉션
  2. 자바 스크립트 (location.href="page-2")
  3. HTML 헤더 (<meta http-equiv="refresh" content="0; URL='http://example.com/page-2'" />)

개인적으로 나는 옵션 1과 2를 시도했다 - 그들은 나를 위해 잘 작동한다. 희망이 도움이!