我可以在ajaxComplete上听取特定元素而不是'文档&#39 ;?

时间:2014-09-19 09:28:17

标签: jquery ajax

早上好,

我正在使用jQuery ajaxComplete函数,我想知道是否可以在特定元素(div)上使用它?

示例:

<div id="myAjaxDiv"></div>

所以,如果在这个特定的div中进行了任何ajax操作,我想发起一个事件。

我想使用像

这样的东西
$("#myAjaxDiv").ajaxComplete(function() {
    // my Scripts
})

而不是

$(document).ajaxComplete(function() {
    // my Scripts
})

但是,这对我不起作用:-( 还有其他解决方案吗?

由于

3 个答案:

答案 0 :(得分:2)

是的,您可以为$ .ajax操作添加指定的选项,即:

$.ajax({
    my_option : 'somevalue',
    complete: function(){
        //..your complete logic
    }
});

然后:

$(document).ajaxComplete(function(event,xhr,options){
   //if(options.my_option == 'somevalue') { or:
     if(options.my_option) {
          //..your logic
     }
});
祝你好运:)

答案 1 :(得分:1)

AjaxComplete方法设置一个全局ajax hadler,只要任何ajax调用完成就会触发。 Ajax请求不绑定到任何元素,因此您不能在元素上使用ajaxComplete。 我建议你直接在你的ajax调用中添加完整的处理程序,如

$.ajax({
    //...your options
    complete: function(){
        //..your complete logic
    }
});

祝你好运。希望它会有所帮助。

答案 2 :(得分:0)

虽然您无法调用未知表单,但您可以按照我的方式进行操作并创建一个&#34; Ajax Wrapper&#34;并在这里使用一个完整的处理程序,当由包装器调用时,它将为您提供具有所需添加的ajaxComplete功能。它具有压缩代码的优点,同时不影响功能。缺点是性能开销很小。

在函数中定义所需的所有默认值。我喜欢这个,因为我在对话框中使用了一些近乎全局的成功/错误句柄。

function ajaxWrapper(srcForm,overrides) {
  var ret = $.extend(true,{type: "POST",
    url: $(srcForm).attr('action'),
    contentType: "application/x-www-form-urlencoded",
    data: {
        tzOffset: new Date().getTimezoneOffset(),
    },
    success: // success handler,
    error: // error handler,
    beforeSend: function(jqXhr,plainObject) {
        $(srcForm).find("button[type=submit], button[type=reset], input[type=submit], input[type=reset]").prop("disabled", true);
    },
    complete: function(jqXHR, textStatus) {
        $(srcForm).find("button[type=submit], button[type=reset], input[type=submit], input[type=reset]").prop("disabled", false);
    }
  },overrides);
  $.ajax(ret);
}

它使用$.extend(true,,)来合并对象。 True将其发送到深层副本,使两个对象都拥有data对象并从两者继承属性,同时覆盖overrides,其中两个对象{{1}可能会发生冲突。

如果您不想覆盖,删除data。根据当前的文档,不支持False。

我把这个函数简单地称为

true,