如何使用jQuery向Rails发送JSON请求

5
我想向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个回答

4

原因是旧版jquery中存在错误。我现在使用的是jquery 1.5版本,并按照以下方式发送POST请求:

$.post(url, { email: emailVal, password: passwordVal }, callback, "json").error(errorHandler);

现在它完美地运作。


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"
});

实际上,jQuery默认会序列化传递的数据。 - katsuya
@knoguchi - 是的 - jQuery.param 是jQuery用来序列化对象的。我只是想知道在别处进行序列化(而不是.ajax自己执行)是否有助于解决这个问题。 - Chris Bailey
谢谢您的建议。我已经按照您的建议尝试手动序列化,但不幸的是它没有改变任何东西。 - katsuya

0
根据jQuery文档,如果您将一个对象传递给数据(data),它会尝试进行一些自动反序列化。
设置 processData: false,然后将数据设置为JSON字符串。

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


谢谢你的回答。我已经尝试过不进行反序列化,但那并不是问题所在。 - katsuya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接