我有这个数据结构:
var formValues = {
TemporaryToken: a.userStatus.get("TemporaryToken"),
MemorableWordPositionAndValues:[
{
Position: a.userStatus.get("MemorableWordPositions")[0],
Value: this.$('[name="login-memorable-character-1"]').val()
},
{
Position: a.userStatus.get("MemorableWordPositions")[1],
Value: this.$('[name="login-memorable-character-2"]').val()
},
{
Position: a.userStatus.get("MemorableWordPositions")[2],
Value: this.$('[name="login-memorable-character-3"]').val()
}
]
}
当我用$ .ajax这样发送它时:
$.ajax({
url:url,
type:'PUT',
//dataType:"json",
data: JSON.stringify(formValues),
success:function (data) {
}
});
它发送请求。但是,如果我这样发送:
$.ajax({
url:url,
type:'PUT',
dataType:"json",
data: formValues,
success:function (data) {
}
});
我收到400 Bad Request。这是服务器上的问题还是JSON.stringify做了一些不同的事情,只是将dataType设置为'json'?
答案 0 :(得分:3)
服务器需要JSON字符串,而不是表单参数。 JSON.stringify
将您的表单参数对象/数组转换为JSON字符串,这是您的服务器所期望的。
答案 1 :(得分:3)
它仍在第二次尝试发送请求;只是你的服务器不理解请求。这是因为jQuery在发送数据之前会自动将formValues
数据处理为查询字符串。见the documentation:
数据
类型:对象,字符串
要发送到服务器的数据。它是 转换为查询字符串,如果还不是字符串。它附加到 GET请求的URL。请参阅processData选项以防止这种情况 自动处理。对象必须是键/值对。如果价值是 Array,jQuery使用相同的密钥序列化多个值 传统环境的价值(如下所述)。
因此,您必须使用JSON.stringify()
,或者不使用JSON。请注意,将processData
设置为false无济于事,因为它只会将字符串[object Object]
发送到您的服务器。另请参阅this question。
答案 2 :(得分:0)
$.param()
怎么样?
var my_data = {};
my_data.post_name = 'post_value';
$.ajax({
url:'/post_url.php'
data:$.param(my_data);
...
});