jquery - 在 ajax 请求中发布长嵌套列表时堆栈级别太深

标签 jquery ruby-on-rails post rack nested-lists

我正在发布一个长嵌套列表,看起来像 Firebug 上的这个图像:

long nested list http://i.imm.io/1m4s2.jpeg

虽然您可以在同一张图片中看到帖子成功,但日志中唯一显示的是以下几行:

[2013-12-11 20:50:37]错误SystemStackError:堆栈级别太深 /home/fotanus/.rvm/gems/ruby-2.0.0-p247/gems/rack-1.5.2/lib/rack/utils.rb:527

Rails 上似乎没有执行任何操作。

长列表将通过以下行发送:

$.ajax({ 类型: "POST", url: '/projects', 数据: JSON.stringify({ sortd_items: Sorted_items }) })

其中 sorted_items 打印在图像中,由递归函数生成。

为什么会发生这种情况,我怎样才能让事情按预期进行?

编辑:使用较小的列表似乎可行:

于 2013-12-11 21:01:08 -0200 开始为 127.0.0.1 发布“/projects” 由 ProjectsController 处理#create as */* 参数:{"{\"sortd_items\":"=>{"\"2\","=>{"\"5\","=>[{",\"6\","=>[ {",\"7\","=>[{",\"8\","=>[{",\"3\","=>{"\"10\","=>[ {",\"10\","=>[{",\"4\","=>[{",\"5\","=>[{",\"6\","= >[{",\"7\","=>[{",\"8\","=>[{",\"3\","=>{"\"10\","= >[{",\"10\","=>[{",\"4\","=>[{",\"9\","=>{"\"11\","= >[{",\"12\","=>{"\"13\","=>[{",\"14\","=>[{",\"15\","= >[{",\"13\","=>[{",\"14\","=>[{",\"15\","=>[{",\"11\", "=>[{",\"12\","=>{"\"13\","=>[{",\"14\","=>[{",\"15\", "=>[{",\"13\","=>[{",\"14\","=>[{",\"15\","=>[{"}"=>nil }]}]}]}]}]}]}}]}]}]}]}]}]}]}}]}}]}]}]}}]}]}]}]}]}] }]}}]}]}]}]}}} 1 毫秒内完成 400 个错误请求

但我需要让它也适用于大型列表。

最佳答案

Rack utils.rb 方法 to_params_hash 确实会递归。这样做是因为,根据 http://api.jquery.com/jQuery.ajax/ , $.ajax()data: 变量视为包含 URL 查询参数的字符串。

总而言之,Rails 将嵌套结构中的每个键视为您希望在 params 哈希中看到的内容。你不知道;您只需将所有 JSON 作为字符串传递,这样您自己的方法就可以安全地将其解码为 JSON,使用(可能)不会滥用堆栈的 C JSON 库。

jQuery ajax data two variables ,您也许可以将字符串填充到哈希中并传递哈希:

var dataObj = {};
dataObj[json]=JSON.stringify({ sortd_items: sorted_items });
$.ajax({ ... data: dataObj });

​ 现在,$.ajax() 将看不到字符串,不会将其转换为查询参数,也不会破坏 Rack。

关于jquery - 在 ajax 请求中发布长嵌套列表时堆栈级别太深,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531663/

相关文章:

Java servlet : request. getParameter() 从 POST 请求中的查询字符串返回一个参数

Node.JS:处理后数据读取错误的正确方法是什么?

Javascript 平滑滚动仍然滞后

PHP E_WARNING 输入变量超出不显示

javascript - 如何在旧版本浏览器中获取输入文件的数据

ruby-on-rails - 使用 Rails 传输数据库

ruby-on-rails - Rails Capistrano 3 - 如何将 production.log 文件共享到 Capistrano 的共享文件夹中?

ruby-on-rails - 使用 json 发送 post 请求来设计注册

jquery - 我的 JQuery CSS 菜单无法隐藏

javascript - 可能清除 jquery `one` 方法