我想创建一个基本的AJAX设置,以发送用户名和密码配置以及每个AJAX调用。我没有在讨论这是否是正确的方法,这对我的项目是必须的,并且还有其他安全配置,所以...

我原以为是使用jQuery.ajaxSetup(options)选项对象创建数据,但是当我为POST函数定义其他数据时,该数据对象将被覆盖。

附言我相信没有必要展示自己的工作或代码在哪里等。我希望问题本身显而易见。

最佳答案

你错了!在ajaxSetup中设置默认数据,然后在ajax调用本身中添加更多数据不会覆盖默认数据。

它像这样工作

$.ajaxSetup({
    data: {
        username: "Bill Gates",
        password: "Nerdman"
    }
});

$.ajax({
    type: "get",
    url: "script.php",
    data: {
        id: 4,
        company: "Microsoft"
    }
});


最终URL将为script.php?username=Bill+Gates&password=Nerdman&id=4&company=Microsoft",从而使请求中发送的最终数据对象

data: {
    username: "Bill Gates",
    password: "Nerdman",
    id: 4,
    company: "Microsoft"
}


因此将发送所有数据,并且与POST请求相同,将添加所有数据。

这是一个Fiddle,检查控制台中的URL,并且所有添加的数据都已存在,因为该数据对象是累积性的,并且对于$.ajaxSetup的每次调用都添加到该对象中,因此它永远不会被覆盖。

jQuery确实也提供了用于这种数据处理的预过滤器,即可以在发送所有ajax调用之前将数据添加到所有ajax调用中,只需编写一次代码,而不是在每次调用时使用beforeSend

var settings = {
    username: "Bill Gates",
    password: "Nerdman"
}

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    options.data = $.param($.extend(originalOptions.data, settings))
});

// later

$.ajax({
    url  : 'something.php',
    data : {"more" : "data"} // the above settings will be added as well
});

09-25 16:40
查看更多