Я отправляю длинный вложенный список, который выглядит, как это изображение на поджигатель:уровень стека слишком глубоко при проводке долго вложен список в запросе 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
И никакого действия не кажется, будет выполняться на Rails.
Длинный список посылается с помощью следующей строки:
$.ajax({ type: "POST", url: '/projects', data: JSON.stringify({ sortd_items: sorted_items }) })
где sorted_items
печатается на изображении, порожденное рекурсивной функции.
Почему это происходит, и как я могу заставить все работать так, как ожидалось?
Edit: Использование меньшего списка, кажется, работает:
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