在每个AJAX调用中发送相同数据的正确方法
Proper way to send the same data in every AJAX call
我想创建一个基本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请求相同,所有的数据将被添加。
这里有一个,点击,检查控制台中的URL,所有添加的数据都在那里,因为数据对象是累积的,并且每次调用$.ajaxSetup
都添加到,它永远不会被覆盖。
jQuery也提供了用于这种数据操作的预过滤器,可以在发送之前将数据添加到所有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
});
您可以使用 beforeSend
和 $.extend
为您的request
添加额外的细节,如下所示:
$.ajax({
url:'someurl',
type:'POST',
beforeSend: function(jqXHR, settings) {
settings.data = $.extend(
settings.data, {
//your new data here
}
);
return true;
}
//other related things
})
您可以使用$.extend()
向基本配置添加额外信息:
var defaultConfig = {username: "User", password: "Insecure Plain Password"};
$.ajax({
url: 'launchMission.php',
data: $.extend(defaultConfig, {missionId: 15, destroyUniverse: true})
});
不直接调用ajax方法,而是创建一个基本javascript函数,并让所有页面使用$.extend()
扩展这个基本方法。在此基本文件中创建sendAjax方法,并将选项作为参数。然后将您的配置添加到该数据中,并进行ajax调用。在每个需要进行ajax调用的类中,调用sendAjax()
方法并传入数据和选项
我想你会通过阅读jQuery找到答案。ajaxSetup的文档:
因此,我们强烈建议不要使用这个API。相反,可以在调用中显式地设置这些选项,或者定义一个简单的插件来这样做。
基本上,他们推荐的是围绕jQuery.ajax
创建自己的包装器(可以是jQuery插件的形式,也可以不是)。
- 序列化数据属性中对象的最可靠方法
- 有没有一种方法可以仅使用HTML/CSS来隐藏基于特定值的数据单元格
- 如何在从客户端接收数据时从本机方法触发javascript函数?
- 我们可以用参数对象集合而不是原始数据来调用JavaScript collection.reduce()方法吗
- 在put方法之前从作用域获取数据
- 使用ReactJS和Flux架构从服务器获取数据的正确方法是什么
- 有没有一种方法可以使用Javascript检索谷歌表单ITSELF(而不是电子表格)的数据
- 有没有一种简单的方法可以用Lodash映射嵌套数据
- 数据属性有没有更干净的方法
- 将数据从promise then方法传递到对象方法
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- ExtJS :: 存储加载数据方法优化
- 如何通过javascript触发rail的数据方法=“删除”
- 使用 jquery ajax 上传文件的数据方法设置
- 使用 d3 js 库的数据方法将事件绑定到动态生成的内容
- 插件内部jquery数据方法的奇怪行为
- 访问自定义组件数据/方法
- 为什么数据方法在获取ID时不能正常工作
- 为什么jQuery'数据方法的行为是这样的?(可能是错误?)
- jQuery数据方法返回整数而不是字符串