18

Web ページで Google フォームを使用しています。iframe を使用する代わりに HTML の一部を変更できるように、ソース コードをフォームからページに直接コピーしました。次に、ユーザーを 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 とフォームの実用的な知識がかなり限られているため、ヘルプや推奨事項があれば大歓迎です!

4

1 に答える 1

1

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

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

これは同様の方法で尋ねられました:

送信後の古い Google フォーム リダイレクト

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


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

于 2012-03-27T20:15:01.883 に答える