我建立的企业内部网站大量使用AJAX调用来加载表格及其他资源,我使用jQuery的ajaxSetup设置默认模态对话框显示加载动画,以提示用户页面正在加载。
在一些搜索框中,我使用了自动完成功能。但是我发现每次输入一个字符时都会弹出加载对话框。请问有没有方法只针对这个调用禁用ajaxSetup呢?
感谢您的帮助!
当需要时,你应该能够通过每个 AJAX 调用传递一个新的选项对象来覆盖默认设置。不确定你的模态框是在 beforeSend 还是其它地方触发的,但我认为你可以从下面的示例中理解。
$.ajax({ beforeSend: function() { /* do nothing */ }....
我猜想你设置了一个处理程序来创建对话框的全局 Ajax 事件。可以像下面这样禁用特定请求的这些事件(来自jQuery文档):
全局事件
这些事件被广播到DOM中的所有元素,触发可能正在监听的任何处理程序。你可以像下面这样监听这些事件:
$("#loading").bind("ajaxSend", function(){
$(this).show();
}).bind("ajaxComplete", function(){
$(this).hide();
});
可以通过传入 global
选项来禁用特定 Ajax 请求的全局事件,示例如下:
$.ajax({
url: "test.html",
global: false,
// ...
});
禁用ajaxSetup默认值以便针对某些AJAX调用进行设置,只需添加一行代码
beforeSend: function(){$.event.trigger('ajaxStart');}
beforeSend
(本地事件)= 在Ajax请求开始之前触发此事件,允许您修改XMLHttpRequest对象。
$.ajaxSetup({
beforeSend: function (xhr)
{
if(this.url !="specific urls"){
//code here
}
},
})();
$.ajaxSetup({
statusCode: {
400: function (data) {
someNiceAlert(data.responseJSON.message);
}
}
});
我需要覆盖这个,因为我正在以不同的方式处理请求中的400错误,并且我不希望消息出现两次。
我的解决方案是将statusCode作为选项传递到$.ajax中,像这样
$.ajax({
url: 'myendpoint',
method: 'put',
data: editData,
statusCode: {
400: function (data) {
// Override $.ajaxSetup for error 400 - error will be handled below on complete
},
}
})...