在不引人注目的ajax事件中访问表单元素

时间:2013-08-15 10:49:59

标签: asp.net-mvc jquery unobtrusive-javascript unobtrusive-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事件。

注意: 我想避免使用匹配网址或在查询中添加一些唯一ID的解决方法。

谢谢!

1 个答案:

答案 0 :(得分:0)

来自.ajaxComplete()文档:

  

从jQuery 1.8开始,只应附加.ajaxComplete()方法   记录。无论如何调用所有ajaxComplete处理程序   Ajax请求已完成。如果你必须区分   请求,使用传递给处理程序的参数。每一次   执行ajaxComplete处理程序,它传递事件对象,即   XMLHttpRequest对象,以及在中使用的设置对象   创建请求。例如,您可以将回调限制为   仅处理处理特定URL的事件:

所以,我读这个的方式是,如果你知道你将运行一个特定的URL(你的php处理脚本),那么你可以在设置中将该URL传递给.ajaxComplete()方法。 ......(在您的情况下,&#34; / xyz&#34;)

$( document ).ajaxComplete(function( event, xhr, settings ) {
  if ( settings.url === "/xyz" ) {
    $( ".log" ).text( "Triggered ajaxComplete handler. The result is " +
      xhr.responseHTML );
  }
});