如何使用jquery将json请求发送到rails

时间:2011-04-19 19:26:50

标签: javascript jquery ruby-on-rails ajax json

我想向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对象包装数据。

有人知道我应该怎么做吗?

3 个答案:

答案 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。

http://api.jquery.com/jQuery.ajax/