Доступ к элементу формы в ненавязчивом событии ajax

Я хотел бы подключиться к обратному вызову 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 только для одной формы.

Примечание. Я бы хотел избежать обходных приемов, таких как сопоставление URL-адреса или добавление уникального идентификатора в запрос.

Спасибо!


person Sam7    schedule 15.08.2013    source источник
comment
Я бы попробовал указать <button> и id и использовать этот id в качестве селектора для .ajaxComplete(). Просто предложение, не знаю, работает ли оно.   -  person DevlshOne    schedule 15.08.2013


Ответы (1)


Из .ajaxComplete() документов:

Начиная с jQuery 1.8, метод .ajaxComplete () должен быть прикреплен только к документу. Вызываются все обработчики ajaxComplete, независимо от того, какой запрос Ajax был выполнен. Если вы должны различать запросы, используйте параметры, переданные обработчику. Каждый раз, когда выполняется обработчик 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 );
  }
});
person DevlshOne    schedule 15.08.2013