如果我尝试使用$.ajax
POST 数据字典,例如:
{
list: ["fake_id_0"],
mapType: "fakeToRealId"
}
jQuery 做了一些奇怪的事情;它将数据转换为:
{
list[]: ["fake_id_0"],
mapType: "fakeToRealId"
}
如您所见,它为键添加了括号list
,但没有为mapType
键添加括号。现在在一般的 REST 意义上,是的,人们用括号来命名带有数组值的键是很常见的……但我的服务器不能这样工作,所以如果我尝试 POSTlist[]
我会遇到问题。
$.ajax
在这段代码中,我已将此问题追溯到 parseData 选项的处理:
// Convert data if not already a string
if ( s.data && s.processData && typeof s.data !== "string" ) {
s.data = jQuery.param( s.data, s.traditional );
}
如果我使用processData: false
它确实会跳过该块......但它也不会为我的数据进行 URLEncode。
所以,我的问题是:如何在没有 jQuery 修改我的键名的情况下拨$.ajax
打电话?processData: true
或者失败了,我该如何使用,但除了括号添加之外processData: false
,仍然可以从该选项中获得所有效果?
PS 或者,如果这都是非标准的 jQuery 行为,是由我拥有的某些插件引起的,请让我知道 :-)
* 编辑 *
我回答了我自己的问题,然后删除了那个答案,因为我意识到它有缺陷。我回答说设置选项traditional:true
(在$.ajax
调用中)修复了括号,它确实......但它也有一个副作用,即它不会序列化嵌套对象。
所以我修改后的问题是:如何在不让 jQuery 修改我的键名并且不禁用嵌套属性的序列化的情况下进行$.ajax
调用?processData: true
换句话说,我如何让 jQuery 像现在一样做所有事情……除了不给我的键添加括号?