2012-11-30 56 views
5

Tôi hiện đang đối mặt với một vấn đề nhỏ với các biểu mẫu bài đăng HTTP và lịch sử pushstate.history.pushstate và HTTP POST form repost

Khi người dùng của tôi gửi biểu mẫu POST trong example.com/page-1 và sau đó nhấp vào liên kết trong trang này, họ được chuyển hướng đến example.com/page-2 bằng history.pushstate. Tập lệnh JS chỉ thay đổi url hiện tại, đẩy cũ vào lịch sử, và sau đó hiển thị nội dung mới. Điều này làm việc hoàn toàn tốt cho tôi.

Vấn đề: Khi người dùng đang example.com/page-2làm mới trang (ctrl + r hoặc làm mới nút), Chromes nhắc nhở người dùng gửi biểu mẫu một lần nữa; nhưng biểu mẫu đã thực sự ở số example.com/page-1 và không có lý do gì để hỏi lại nó trong trang "mới" này.

Có cách nào để xóa tất cả dữ liệu được gửi trước đó trong javascript trên thay đổi cửa sổ popstate để ngăn chặn nhắc nhở đăng lại từ trình duyệt không? Hay tôi đang thiếu cái gì đó với trạng thái lịch sử của tôi? Hay là một cái gì đó hiện chưa được trình duyệt thực hiện tốt?

Tôi chỉ thử nghiệm nó bằng chrome vì tôi không triển khai pushstate với các trình duyệt khác.

Trả lời

1

Có thể thử thay thế Thay thế? Xem this.

Các replaceState() phương pháp

history.replaceState() hoạt động giống hệt như history.pushState() trừ replaceState rằng() sẽ thay đổi các mục nhập lịch sử hiện tại thay vì tạo một hình mới.

replaceState() đặc biệt hữu ích khi bạn muốn cập nhật đối tượng trạng thái hoặc URL của mục nhập lịch sử hiện tại để phản hồi một số hành động của người dùng.

+0

Xin chào, tôi đã gặp vấn đề tương tự với replaceState, nhưng bây giờ tôi gửi biểu mẫu của mình qua Ajax để giải quyết vấn đề. Tôi đoán rằng bằng cách sử dụng javascript history.pushstate và replacestate mà không gửi biểu mẫu thông qua ajax không phải là một điều tốt để làm vì nó khá dễ dàng để làm như vậy với jquery, mootools vv – pafounet

0

Tôi gặp sự cố giống nhau - Tôi đang sử dụng API lịch sử với BackboneJS.

Giải pháp mà tôi đã nghĩ là có trang trung gian mà biểu mẫu chuyển hướng đến sau khi đăng nhập. Mục đích của trang trung gian này là thêm trang không phải POST trước trang đích để trình duyệt sẽ không nhắc gửi lại biểu mẫu (và để Chrome KHÔNG thêm mục dự phòng).

Ví dụ của bạn, sau khi nộp mẫu đơn POST trong example.com/page-1 máy chủ nên chuyển hướng người dùng đến example.com/page-1a

example.com/page-1a có thể xác minh rằng các chứng chỉ người dùng có mặt, và sau đó chuyển hướng đến example.com/page-2. Điều này sẽ giải quyết vấn đề của bạn, tôi tin.

Đối với cơ chế chuyển hướng, có 3 lựa chọn mà tôi có thể nghĩ đến:

  1. server-side chuyển hướng
  2. JavaScript (location.href="page-2")
  3. HTML tiêu đề (<meta http-equiv="refresh" content="0; URL='http://example.com/page-2'" />)

Cá nhân tôi đã thử các tùy chọn 1 và 2 - chúng hoạt động tốt cho tôi. Hi vọng điêu nay co ich!