Доступ к элементу формы в ненавязчивом событии 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-адреса или добавление уникального идентификатора в запрос.
Спасибо!
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 );
}
});