使用默认设置在MVC中使用Ajax

时间:2018-09-05 06:18:31

标签: ajax default

我们的应用程序中有很多ajax调用。

我们可以在布局文件中设置标头,异步,数据类型等基本参数,并且仅使用/覆盖在调用时更改的参数。

例如在布局文件中

Case 1: Users strength is less then 20 users
Request made in App: 10:15:00 AM
Request reached in Adapter: 10:15:00 AM  
Request reached in ESB: 10:15:00 AM

Case 2: Users strength is increased towards 1000
Request made in App: 10:15:00 AM
Request reached in Adapter: 10:15:00 AM  
Request reached in ESB: 10:15:55 AM

例如:在调用文件中

  $.ajax({
        dataType: "json",
        async: false,
        headers: { "Accept-Encoding": "compress, gzip" }
  });

1 个答案:

答案 0 :(得分:0)

jQuery本身已经具有ajaxSetup()方法来设置默认设置,该方法将为将来的AJAX回调启用。下面是一个示例,该示例对具有相同布局页面的所有视图页面使用默认设置:

$.ajaxSetup({
    dataType: "json",
    async: false,
    headers: { "Accept-Encoding": "compress, gzip" }
});

然后,您也可以在视图页面中添加其他设置:

$.ajax({
    url: "@Url.Action("GetState", "Country")",
    data: { search: search, StateId: state },
    success: function (data) { 
        // do something  
    }
});

如果要覆盖默认设置,则可以定义AJAX选项并通过$.ajax()传递它:

var config = {
    type: 'POST',
    url: "@Url.Action("GetState", "Country")",
    data: { search: search, StateId: state },
    async: true,
    dataType: "text"
};

$.ajax(config);

但是,由于以下原因,不建议使用ajaxSetup()

  

此处指定的设置将影响所有对$.ajax的呼叫或   基于Ajax的派生词,例如$.get()。这可能导致不良   行为,因为可能会有其他调用者(例如插件)   正常的默认设置。因此,我们强烈建议   反对使用此API 。相反,在   调用或定义一个简单的插件即可。

因此,最好在单个变量或函数中创建默认设置,并在必要时进行扩展,因为基本上AJAX设置包含键值对(KVP)对象。使用jQuery.extend()函数将默认设置合并到其他设置中,然后将其作为AJAX回调参数传递:

// Layout page
var defaultSettings = {
    dataType: "json",
    async: false,
    headers: { "Accept-Encoding": "compress, gzip" }
};

// View page
var viewSettings = {
    url: "@Url.Action("GetState", "Country")",
    data: { search: search, StateId: state },
    success: function (data) { 
        // do something  
    }
};

var settings = $.extend({}, defaultSettings, viewSettings);
$.ajax(settings);

在发送AJAX请求之前,还可以使用jQuery.isPlainObject(),以确保所有参数都是有效的KVP(对于true类型,它应返回PlainObject)。