2012-03-16 30 views
8

ウェブページでGoogleフォームを利用しています。フォームから直接ソースコードをコピーして、iframeを使わずにHTMLの一部を修正できるようにしました。その後、ユーザーをGoogleドキュメントの返信ページに移動する代わりに、別のページにリダイレクトしたいと思います。古いGoogleフォームを送信して別のページにリダイレクトする

私が苦しんでいるのはページリダイレクトです。私は、これはこれでChromeとFirefoxで正常に動作させることができました:

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

IEとSafariが両方自動的にリダイレクトを行なったし、応答がGoogleのフォームに書き込まやったことがなかったです。リダイレクトを削除すると、そのアクションは両方で完全に機能し、レスポンスはGoogleスプレッドシートに記録されます。

だから私はアウトアクションを引くしようとし、その代わりに、それを代わりにONSUBMITですべてをしたので、同じよう:以前のよう

<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"> 

同じ問題、IEとSafariの両方をリダイレクトし、そして何ものGoogleスプレッドシートに書き込まれません。もう一度、リダイレクトを削除すると、すべてのブラウザでレスポンスが記録されます。私は、アクションの後に警告をスローするような他のものを行うこともでき、すべてが正常に動作し続けます。私が問題を見るのは、リダイレクトだけです。

この時点で私は想像できるのは、リダイレクトとアクションの間に何らかの矛盾があることだけです。私は非常にjavascriptとフォームの作業の知識が限られているので、任意のヘルプや推奨事項は非常に高く評価されるだろう!

答えて

0

ブラウザのようなサウンドは、リダイレクトを処理する前にフォーム提出を完了していません。送信自体の前にonsubmitが発生するので、そこで問題を処理することはできません。

リダイレクトの対象iframeのonload関数を使用します。

これは同様に頼まれました:

Old Google Form redirect after submission

は答えをよく見てください。 iframeのonload関数はリダイレクトを処理するので、リダイレクトは送信が完了し、Googleから応答が返されるまで行われません。 Googleからの隠された応答が読み込まれると、リダイレクトが発生します。これは、クライアントとサーバー間の非同期機能です。リダイレクトする前にサーバーがデータを処理するのを待っています。


拡張メモ:setTimeout関数内のリダイレクトを入れてみてください。これにより、リダイレクトの実行が遅れ、サーバーが最初に送信を処理できるようになります。しかし、setTimeoutには一定の時間が必要です。データ処理が同期していない場合(つまり非同期の場合)、setTimeoutは動作しません。早すぎたり遅すぎたりする可能性があります。非同期データ処理は、データ処理で不確定な時間(HTTP要求など)が必要な場合に適用されます。

関連する問題