"[{\-6ren">
gpt4 book ai didi

jquery - Rails 无法正确解码来自 jQuery 的 JSON(数组变成带有整数键的散列)

转载 作者:IT老高 更新时间:2023-10-28 12:42:37 25 4
gpt4 key购买 nike

每次我想用 jQuery 将一组 JSON 对象发布到 Rails 时,我都会遇到这个问题。如果我对数组进行字符串化,我可以看到 jQuery 正在正常工作:

"shared_items"=>"[{\"entity_id\":\"253\",\"position\":1},{\"entity_id\":\"823\",\"position\":2}]"

但如果我只是将数组作为 AJAX 调用的数据发送,我会得到:

"shared_items"=>{"0"=>{"entity_id"=>"253", "position"=>"1"}, "1"=>{"entity_id"=>"823", "position"=>"2"}}

而如果我只是发送一个普通数组,它就可以工作:

"shared_items"=>["entity_253"]

为什么 Rails 将数组更改为那个奇怪的哈希?想到的唯一原因是 Rails 无法正确理解内容,因为这里没有类型(有没有办法在 jQuery 调用中设置它?):

Processing by SharedListsController#create as 

谢谢!

更新:我将数据作为数组而不是字符串发送,并且该数组是使用 .push() 函数动态创建的。尝试使用 $.post$.ajax,结果相同。

最佳答案

如果有人偶然发现并想要更好的解决方案,您可以在 .ajax 调用中指定“contentType: 'application/json'”选项,并让 Rails 正确解析 JSON 对象,而不会将其乱码为整数键散列具有全字符串值。

所以,总而言之,我的问题是:

$.ajax({
type : "POST",
url : 'http://localhost:3001/plugin/bulk_import/',
dataType: 'json',
data : {"shared_items": [{"entity_id":"253","position":1}, {"entity_id":"823","position":2}]}
});

导致 Rails 将事物解析为:

Parameters: {"shared_items"=>{"0"=>{"entity_id"=>"253", "position"=>"1"}, "1"=>{"entity_id"=>"823", "position"=>"2"}}}

而这(注意:我们现在正在对 javascript 对象进行字符串化并指定内容类型,因此 rails 将知道如何解析我们的字符串):

$.ajax({
type : "POST",
url : 'http://localhost:3001/plugin/bulk_import/',
dataType: 'json',
contentType: 'application/json',
data : JSON.stringify({"shared_items": [{"entity_id":"253","position":1}, {"entity_id":"823","position":2}]})
});

在 Rails 中生成一个不错的对象:

Parameters: {"shared_items"=>[{"entity_id"=>"253", "position"=>1}, {"entity_id"=>"823", "position"=>2}]}

这适用于我在 Rails 3 中的 Ruby 1.9.3 上。

关于jquery - Rails 无法正确解码来自 jQuery 的 JSON(数组变成带有整数键的散列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6410810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com