0

目立たない ajax を使用している特定のフォームの ajax コールバックにフックしたいと思います。ajax 呼び出しは、目立たない ajax を使用するこの標準形式では問題ありません。

<form action="/xyz" data-ajax="true" data-ajax-method="POST" id="someformid" method="post">
    <input type="text" name="bla" />
    <button>submit</button>
</form>

私の最初のアプローチはこれでした:

var form = $("#someformid");
$(document).ajaxComplete(function (e, request, options) {
    // is not hitting here
});

しかし、それはうまくいかないようです。このアプローチはハンドラーにヒットしますが、目的のフォームだけではありません。ただし、すべての ajaxComplete イベントに対して。

var form = $("#someformid");
form.submit(function (eevent) {
    $(document).ajaxComplete(function (e, request, options) {
        // this hits ok. but not just for this form
    });
});

次のオプションは、「data-ajax-success」を使用することです。しかし、それはフォームコンテキストを提供していないようです。

質問: ajaxComplete イベントを 1 つのフォームだけに排他的に接続するにはどうすればよいですか。

注: URL を一致させたり、一意の ID をクエリに追加したりするなどの回避策は避けたいと思います。

ありがとう!

4

1 に答える 1

0

.ajaxComplete()ドキュメントから:

jQuery 1.8 以降、.ajaxComplete() メソッドはドキュメントにのみ添付する必要があります。どの Ajax リクエストが完了したかに関係なく、すべての ajaxComplete ハンドラーが呼び出されます。要求を区別する必要がある場合は、ハンドラーに渡されるパラメーターを使用します。ajaxComplete ハンドラーが実行されるたびに、イベント オブジェクト、XMLHttpRequest オブジェクト、および要求の作成に使用された設定オブジェクトが渡されます。たとえば、特定の URL を処理するイベントのみを処理するようにコールバックを制限できます。

したがって、私がこれを読む方法は、特定の URL (PHP 処理スクリプト) を実行することがわかっている場合は、設定でその URL を.ajaxComplete()メソッドに渡すことができるということです.... (あなたの場合は、"/ xyz")

$( document ).ajaxComplete(function( event, xhr, settings ) {
  if ( settings.url === "/xyz" ) {
    $( ".log" ).text( "Triggered ajaxComplete handler. The result is " +
      xhr.responseHTML );
  }
});
于 2013-08-15T10:56:58.143 に答える