我張貼長嵌套列表看起來像這樣的圖像螢火發帖長嵌套名單:堆棧層次過深時,在Ajax請求
long nested list http://i.imm.io/1m4s2.jpeg
雖然你可以在同一圖像的在看帖子是成功的,這在日誌中顯示的僅僅是以下行:
[2013-12-11 20:50:37] ERROR SystemStackError: stack level too deep /home/fotanus/.rvm/gems/ruby-2.0.0-p247/gems/rack-1.5.2/lib/rack/utils.rb:527
,沒有行動似乎on Rails的執行。
長列表正在使用以下行發送:
$.ajax({ type: "POST", url: '/projects', data: JSON.stringify({ sortd_items: sorted_items }) })
sorted_items
其中被打印的圖象中,通過遞歸函數生成的。
爲什麼會發生這種情況,以及如何使事情按預期工作?
編輯:使用較小的名單似乎工作:
Started POST "/projects" for 127.0.0.1 at 2013-12-11 21:01:08 -0200 Processing by ProjectsController#create as */* Parameters: {"{\"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}]}]}]}]}]}]}}]}]}]}]}]}]}]}}]}}]}]}]}}]}]}]}]}]}]}]}}]}]}]}]}}} Completed 400 Bad Request in 1ms
但我需要使它與大名單正常工作。
你究竟是如何發佈這些數據?似乎可能發生的事情是,您發佈的對象不是特別深(可能大約爲5,最大深度),但它會轉到Rack的一部分,試圖以不同的格式解析它,這最終會創建一個非常深的散列,而不是它打算做的事情。也就是說,我想你可能會向服務器發送一個不正確的編碼查詢字符串。 – Bubbles
@Bubbles'你是如何發佈這些數據的?'我從我的JavaScript文件中複製了發佈數據的行 - 如果你需要別的東西,對不起,我不明白。我如何檢查我的字符串是否正確編碼? 'JSON.stringfy'不確定? – fotanus