我想创建一个基本的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
});