禁用ajaxSetup默认设置以针对某些AJAX调用

8

我建立的企业内部网站大量使用AJAX调用来加载表格及其他资源,我使用jQuery的ajaxSetup设置默认模态对话框显示加载动画,以提示用户页面正在加载。

在一些搜索框中,我使用了自动完成功能。但是我发现每次输入一个字符时都会弹出加载对话框。请问有没有方法只针对这个调用禁用ajaxSetup呢?

感谢您的帮助!

6个回答

14

当需要时,你应该能够通过每个 AJAX 调用传递一个新的选项对象来覆盖默认设置。不确定你的模态框是在 beforeSend 还是其它地方触发的,但我认为你可以从下面的示例中理解。

$.ajax({ beforeSend: function() { /* do nothing */ }....

11

我猜想你设置了一个处理程序来创建对话框的全局 Ajax 事件。可以像下面这样禁用特定请求的这些事件(来自jQuery文档):

全局事件

这些事件被广播到DOM中的所有元素,触发可能正在监听的任何处理程序。你可以像下面这样监听这些事件:

$("#loading").bind("ajaxSend", function(){
   $(this).show();
 }).bind("ajaxComplete", function(){
   $(this).hide();
 });

可以通过传入 global 选项来禁用特定 Ajax 请求的全局事件,示例如下:

$.ajax({
   url: "test.html",
   global: false,
   // ...
 });

1

禁用ajaxSetup默认值以便针对某些AJAX调用进行设置,只需添加一行代码

beforeSend: function(){$.event.trigger('ajaxStart');}

beforeSend(本地事件)= 在Ajax请求开始之前触发此事件,允许您修改XMLHttpRequest对象


0
为了避免特定的URL,我使用了以下方法
$.ajaxSetup({
 beforeSend: function (xhr)
            {   
                    if(this.url !="specific urls"){
//code here
                    }
            },
})();

0
我们在应用程序中的每个ajax请求中都有一个$.ajaxSetup,就像这样。
$.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
        },
     }
})...

-4
使用$.ajax()调用来覆盖在$.ajaxSetup()中建立的默认值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接