2012-03-16 9 views
8

Tôi đang sử dụng Biểu mẫu Google trên trang web. Tôi đã sao chép mã nguồn từ biểu mẫu trực tiếp lên trang của mình để tôi có thể sửa đổi một số HTML thay vì sử dụng khung nội tuyến. Sau đó, thay vì đưa người dùng đến trang phản hồi của tài liệu google, tôi muốn chuyển hướng họ đến một trang khác.Gửi Biểu mẫu Google cũ rồi chuyển hướng đến một trang khác

Sự cố mà tôi đang gặp phải là chuyển hướng trang. Tôi đã có thể thực hiện việc này đúng cách trong Chrome và Firefox với điều này:

<form target="GoogleResponse" action="https://docs.google.com/spreadsheet/ 
formResponse?formkey=xxxxxxxxxxxxxxxxxxxxxxxxxx&amp;ifq;" onsubmit=" 
window.location = 'targetPage.html';" method="POST" id="ss-form"> 

Cả IE và Safari đều tự động chuyển hướng và phản hồi không bao giờ được ghi vào Biểu mẫu Google. Nếu tôi thả chuyển hướng, hành động sẽ hoạt động hoàn hảo trong cả hai và phản hồi được ghi lại trong bảng tính của Google.

Vì vậy, tôi đã cố gắng để kéo các hành động ra và thay vào đó đã làm nó mọi thứ trong onsubmit thay vào đó, như vậy:

<form target="GoogleResponse" onsubmit="this.action = https://docs.google.com 
/spreadsheet/formResponse?formkey=xxxxxxxxxxxxxxxxxxxxxxxxxx&amp;ifq'; 
window.location = 'targetPage.html';" method="POST" id="ss-form"> 

Cùng một vấn đề như trước đây, IE và Safari đều chuyển hướng, và không có gì được ghi vào bảng tính Google . Và một lần nữa, nếu tôi xóa chuyển hướng, phản hồi sẽ được ghi lại trong tất cả các trình duyệt. Tôi cũng có thể làm những thứ khác như ném vào một cảnh báo sau khi hành động, và mọi thứ vẫn tiếp tục hoạt động tốt. Lần duy nhất tôi thấy vấn đề là với chuyển hướng.

Vì vậy, vào thời điểm này, điều duy nhất tôi có thể hình dung là một số loại xung đột giữa chuyển hướng và hành động. Tôi có kiến ​​thức làm việc khá hạn chế về javascript và các biểu mẫu để mọi trợ giúp hoặc đề xuất sẽ được đánh giá rất nhiều!

Trả lời

0

Có vẻ như trình duyệt chưa hoàn thành quá trình gửi biểu mẫu trước khi xử lý chuyển hướng. onsubmit xảy ra trước khi gửi bản thân để bạn không thể xử lý vấn đề ở đó.

Sử dụng chức năng tải trọng của iframe đích cho chuyển hướng.

này đã được yêu cầu theo cách tương tự:

Old Google Form redirect after submission

Hãy xem tốt tại câu trả lời. Hàm onload của khung nội tuyến sẽ xử lý chuyển hướng, do đó chuyển hướng sẽ không xảy ra cho đến khi quá trình gửi hoàn tất và phản hồi đã được cung cấp từ google. Vì vậy, khi phản hồi ẩn từ google được tải, chúng tôi kích hoạt chuyển hướng. Đây là chức năng không đồng bộ giữa máy khách và máy chủ. Chúng tôi đang chờ máy chủ xử lý dữ liệu trước khi chuyển hướng.


Ghi chú mở rộng: Bạn có thể thử đặt chuyển hướng trong hàm setTimeout. Điều này sẽ trì hoãn việc thực hiện chuyển hướng, cho phép máy chủ xử lý việc gửi đầu tiên. Nhưng setTimeout đòi hỏi một lượng thời gian cố định, vì vậy nếu việc xử lý dữ liệu không đồng bộ (tức là không đồng bộ), setTimeout sẽ không hoạt động vì nó có thể cháy sớm hoặc quá muộn. Xử lý dữ liệu không đồng bộ được áp dụng khi xử lý dữ liệu yêu cầu một lượng thời gian không xác định (chẳng hạn như các yêu cầu http).