153

次のコードがあります。

<script type="text/javascript">
        function SubmitForm()
        {

            form1.submit();
        }

        function ShowResponse()
        {

        }
</script>
.
.
.
<div>
    <a href="#" onclick="SubmitForm();">Click</a>
</div>

のhtml応答をキャプチャしたいform1.submitですか?どうすればいいですか?form1.submit メソッドに任意のコールバック関数を登録できますか?

4

20 に答える 20

129

プレーンな JavaScript ではこれを簡単に行うことはできません。フォームを投稿すると、フォーム入力がサーバーに送信され、ページが更新されます。データはサーバー側で処理されます。つまり、このsubmit()関数は実際には何も返さず、フォーム データをサーバーに送信するだけです。

本当に Javascript で (ページを更新せずに) 応答を取得したい場合は、AJAX を使用する必要があります。AJAX の使用について話し始めると、ライブラリを使用する必要があります。jQueryは群を抜いて最も人気があり、私の個人的なお気に入りです。Formと呼ばれる jQuery 用の優れたプラグインがあり、まさにあなたが望むように機能します。

jQuery とそのプラグインの使用方法は次のとおりです。

$('#myForm')
    .ajaxForm({
        url : 'myscript.php', // or whatever
        dataType : 'json',
        success : function (response) {
            alert("The server says: " + response);
        }
    })
;
于 2008-12-17T14:25:03.093 に答える
65

Ajax の代替手段は、非<iframe>表示をフォームのターゲットとして設定し<iframe>、そのonloadハンドラーでその内容を読み取ることです。しかし、Ajax があるのに、なぜ気にする必要があるのでしょうか。

注:一部の回答では、 Ajax なしではこれを達成することは不可能であると主張されているため、この代替案について言及したかっただけです。

于 2008-12-17T14:27:33.790 に答える
12

submit() の機能を理解しているかどうかわかりません...

これを行うとform1.submit();、フォーム情報が Web サーバーに送信されます。

WebServer は何をすべきかを実行し、真新しい Web ページをクライアントに返します (通常、何かが変更された同じページ)。

したがって、form.submit() アクションの戻りを「キャッチ」する方法はありません。

于 2008-12-17T14:20:14.147 に答える
6

コールバックはありません。リンクをたどるようなものです。

サーバーの応答をキャプチャする場合は、AJAX を使用するか、iframe に投稿して、iframe のonload()イベントの後に表示されるものを取得します。

于 2008-12-17T14:20:49.963 に答える
2

これは、この問題に対する私のコードです:

<form id="formoid" action="./demoText.php" title="" method="post">
    <div>
        <label class="title">First Name</label>
        <input type="text" id="name" name="name" >
    </div>
    <div>
        <input type="submit" id="submitButton"  name="submitButton" value="Submit">
    </div>
</form>

<script type='text/javascript'>
/* attach a submit handler to the form */
$("#formoid").submit(function(event) {

  /* stop form from submitting normally */
  event.preventDefault();

  /* get the action attribute from the <form action=""> element */
  var $form = $( this ), url = $form.attr( 'action' );

  /* Send the data using post with element id name and name2*/
  var posting = $.post( url, { name: $('#name').val()} );

  /* Alerts the results */
  posting.done(function( data ) {
    alert('success');
  });
});
</script>
于 2016-07-20T07:04:18.213 に答える
2

event.preventDefault()送信ボタンのクリック ハンドラーで、HTML フォームのデフォルトsubmitイベントが発生しないようにすることができます (これにより、ページが更新されます)。

<form>もう 1 つの方法は、よりハックなフォーム マークアップを使用することtype="submit"です。これらは最終的にページを更新するクリック イベントにつながるためです。

を引き続き使用し<form>たいが、カスタム クリック ハンドラーを作成したくない場合は、jQuery のメソッドを使用できます。このメソッドは、、 などajaxの promise メソッドを公開することで問題全体を抽象化します。successerror


要約すると、次のいずれかで問題を解決できます。

• を使用して、処理関数のデフォルトの動作を防止します。event.preventDefault()

• デフォルトの動作を持たない要素を使用する (例: <form>)

•jQueryの使用ajax


(この質問が 2008 年のものであることに気付きました。なぜそれが私のフィードに表示されたのかわかりません。いずれにせよ、これが明確な答えであることを願っています)

于 2015-05-11T20:42:53.503 に答える
2
    $.ajax({
        url: "/users/login/",    //give your url here
        type: 'POST',
        dataType: "json",
        data: logindata,
        success: function ( data ){
        //  alert(data);    do your stuff
        },
        error: function ( data ){
        //  alert(data);    do your stuff
        }
    });
于 2016-04-29T07:43:52.910 に答える
1

Chrome を使用して AJAX リクエストの出力をキャプチャする場合は、次の簡単な手順に従ってください。

  1. プログラマーズ ツールボックスを開く
  2. コンソールに移動し、その中のどこにでもアクセスできます
  3. 表示されるメニューで、[XMXHTTPRequest ログを有効にする] をクリックします。
  4. これを行うと、AJAX リクエストを行うたびに、「XHR の読み込みが完了しました:http://......」で始まるメッセージがコンソールに表示されます。
  5. 表示されるリンクをクリックすると、[リソース] タブが表示され、ヘッダーと応答の内容が表示されます。
于 2010-10-07T15:29:48.563 に答える
0

AJAX を使用する必要があります。通常、フォームを送信すると、ブラウザーに新しいページが読み込まれます。

于 2008-12-17T14:19:19.437 に答える
0

これは、javascript と AJAX テクノロジを使用して行うことができます。jquery とこのform plug inを見てください。form.submit のコールバックを登録するには、2 つの js ファイルを含めるだけで済みます。

于 2008-12-17T14:24:09.693 に答える
-6

あなたはajaxなしでそれを行うことができます。

以下にあなたの好きなことを書いてください。

.. .. ..

そして「action.php」で

次に frmLogin.submit(); の後。

変数 $submit_return を読み取ります。

$submit_return には戻り値が含まれます。

幸運を。

于 2015-07-11T17:56:02.143 に答える