2011-02-17 8 views
0

サーバーがフォームの処理を完了したときにjavascriptがコールバックを登録する方法はありますか?これは私の特別な設定です:私は無駄に以下試したフォームが処理された後のJavascriptイベント

<form 
    id="savePlaylistForm" 
    name="savePlaylistForm" 
    target="savePlaylistIFrame" 
    method="post" 
    action="<?=base_url()?>index.php/savePlaylist"> 
    <input 
     type="hidden" 
     id="savePlaylistEntire" 
     name="savePlaylistEntire" /> 
</form> 
<iframe 
    id="savePlaylistIFrame" 
    name="savePlaylistIFrame" 
    style="display: none"> 
</iframe> 

:ときにクライアントをonSubmitが起こるので、フォームへのonSubmit取り付け

をonSubmit

は、右のイベントではありません提出しようとします。サーバーはまだ連絡を受けていません。

のonLoad

私は、ターゲットのiFrameにonLoadなどを取り付けました。私の場合、それは解雇されません。私のサーバスクリプトは、m3uプレイリストファイルをエミュレートするヘッダを設定します。 IFrameは、通常のHTMLページが読み込まれたときにのみonLoadを起動し、ファイル保存ダイアログがポップアップしないときに起動します。プレーンなHTMLページをiFrameに読み込んでも、onLoadはユーザーがフォームを初めて送信するときにのみ起動します。それ以降の投稿はonLoadを起動しません。

+0

私はコードがどのように見えるか分かりませんが、データを送信するために 'XMLHttpRequest'オブジェクト(' xhr')を使用している場合は、 'onreadystatechange'イベントにイベントをバインドできるはずです。そこでは 'xhr.getResponseHeader( 'Content-Type')'などを使って返されたヘッダを調べることができるはずです。 'onreadystatechange'イベントが起動し、' readyState == 4'イベントが発生した場合でも、質問する必要はありません。 – ggutenberg

答えて

1

これは意味がありませんが、フォームを送信すると新しい応答でページがリロードされます。だから元のドキュメントはもはや存在しないでしょう。だから、どうやってコールバックを実行できますか?

デフォルトの送信アクションを取り消す(falseを返す)onSubmitハンドラをアタッチし、Ajax呼び出しを行うことによってデフォルトのブラウザ送信を複製することができます。次に、応答コールバックを添付する場所があります(onReadyStateChangeを聞いたり、jQueryのような上位レベルのものを使用して)。

+0

フォームを送信してもページ全体が最新表示されません。これは、インプレースフォーム提出です。 '$( 'savePlaylistForm')。submit()'を呼び出し、サーバレスポンスはiFrameを対象としています。 これはAjaxで複製できません。 Ajaxは、ファイルをエミュレートするPHP出力のファイル保存ダイアログをポップアップできません。 – JoJo

関連する問題