早上好,
我正在使用jQuery ajaxComplete函数,我想知道是否可以在特定元素(div)上使用它?
示例:
<div id="myAjaxDiv"></div>
所以,如果在这个特定的div中进行了任何ajax操作,我想发起一个事件。
我想使用像
这样的东西$("#myAjaxDiv").ajaxComplete(function() {
// my Scripts
})
而不是
$(document).ajaxComplete(function() {
// my Scripts
})
但是,这对我不起作用:-( 还有其他解决方案吗?
由于
答案 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,