【发布时间】:2018-04-26 00:27:27
【问题描述】:
我构建的公司 Intranet 大量使用 AJAX 调用来加载表和其他资源。默认情况下,我会出现一个带有加载 gif 的模式对话框,让用户知道页面正在加载。我用 jQuery 的 ajaxSetup 设置了这个默认值。
有几个地方我使用了带有自动完成功能的搜索框。我注意到每次输入一个字符时都会出现加载对话框。有什么方法可以为该调用禁用 ajaxSetup?
感谢您的帮助!
【问题讨论】:
我构建的公司 Intranet 大量使用 AJAX 调用来加载表和其他资源。默认情况下,我会出现一个带有加载 gif 的模式对话框,让用户知道页面正在加载。我用 jQuery 的 ajaxSetup 设置了这个默认值。
有几个地方我使用了带有自动完成功能的搜索框。我注意到每次输入一个字符时都会出现加载对话框。有什么方法可以为该调用禁用 ajaxSetup?
感谢您的帮助!
【问题讨论】:
您应该能够在每次 ajax 调用时传递一个新的选项对象,以便在需要时覆盖默认设置。
不确定你的模态是否在 beforeSend 或你有什么,但我想你会从下面得到图片。
$.ajax({ beforeSend: function() { /* do nothing */ }....
【讨论】:
我猜您为全局 Ajax 事件设置了一个处理程序来创建对话框。可以针对特定请求禁用这些事件,如下所示(来自 jQuery 文档):
全球事件
这些事件被广播到 DOM 中的所有元素,触发任何可能正在监听的处理程序。您可以像这样监听这些事件:
$("#loading").bind("ajaxSend", function(){
$(this).show();
}).bind("ajaxComplete", function(){
$(this).hide();
});
对于特定的 Ajax 请求,可以通过传入全局选项来禁用全局事件,如下所示:
$.ajax({
url: "test.html",
global: false,
// ...
});
【讨论】:
禁用某些 AJAX 调用的 ajaxSetup Defaults 有一行添加
beforeSend: function(){$.event.trigger('ajaxStart');}
beforeSend (Local Event) = 该事件在Ajax请求开始前触发,允许你修改XMLHttpRequest对象
【讨论】:
为了避免使用这种方式的某些特定 URL
$.ajaxSetup({
beforeSend: function (xhr)
{
if(this.url !="specific urls"){
//code here
}
},
})();
【讨论】:
使用 $.ajax() 调用来覆盖在 $.ajaxSetup() 中建立的默认值。
【讨论】: