我想向rails 3服务器发送JSON post请求。我有以下ajax请求:
$.ajax({
type: 'POST',
contentType: "application/json",
url: url,
data: {email: "example@test.com", password: "password"},
success: onSuccess,
error: onError,
dataType: "json"
});
然而,rails服务器接收如下数据:
{"_json"=>["object Object"]}
在哪里我希望它接收它:
{"email"=>"exmaple@test.com", "password"=>"[FILTERED]"}
我认为这是发生的,因为如果内容类型是json,jquery用_json对象包装数据。
有人知道我应该怎么做吗?
答案 0 :(得分:4)
原来是因为旧版jquery中存在错误。我现在用户jquery版本1.5并发送帖子请求如下:
$.post(url, { email: emailVal, password: passwordVal }, callback, "json").error(errorHandler);
它现在完美无缺。
答案 1 :(得分:2)
您是否尝试过自己进行序列化(使用jQuery.param)?
jQuery.param({email: "example@test.com", password: "password"})
==> "email=example%40test.com&password=password"
这样你的ajax请求就变成了:
$.ajax({ type: 'POST',
contentType: "application/json",
url: url, data: $.param({email: "example@test.com", password: "password"}),
success: onSuccess,
error: onError,
dataType: "json"
});
答案 2 :(得分:0)
根据jquery文档,似乎如果你将一个对象传递给数据,它会尝试一些自动反序列化。
设置processData: false
,然后将数据设置为json string。