2011-05-19 43 views
1

在这里点击一个砖墙。我试图发送一个包含换行符的字符串(\ N,转身\由JSON.stringify u000a)作为到一个Rails应用程序一个JSON对象的一部分:由Rails控制器丢失的JSON字符串中的换行符

{"bob":{"id":46,"notes":"foo\u000abar\u000abaz"}} 

这到线路上,因为这与\ u000a转义为%5Cu000a:

http://localhost/bobs/46?draft=true&%7B%22bob%22%3A%7B%22id%22%3A46%2C%22notes%22%3A%22foo%5Cu000abar%5Cu000abaz%22%7D%7D= 

但是第二次请求命中Rubyland,新行消失在乙醚中的粉扑,变成空格:

Processing Api::BobsController#update (for 127.0.0.1 at 2011-05-19 11:01:43) [PUT] 
    Parameters: {"draft"=>"true", "action"=>"update", "id"=>"46", "controller"=>"api/bobs", "bob"=>{"notes"=>"foo bar baz", "id"=>46} 

而且这不只是一些记录神器,但是我也打算进入数据库:

ree-1.8.7-2010.02 > Bob.find_by_id(46) 
=> #<Bob id: 46, notes: "foo bar baz"...> 

如果我发送eg。 “\\ n”而不是“\ n”,他们通过罚款:

Processing Api::BobsController#update (for 127.0.0.1 at 2011-05-19 11:01:43) [PUT] 
    Parameters: {"draft"=>"true", "action"=>"update", "id"=>"46", "controller"=>"api/bobs", "bob"=>{"notes"=>"foo\\nbar\\nbaz", "id"=>46} 

这是怎么回事,为什么?

更新:一位同事模糊地回想起Passenger已经被怀疑放弃了一些特殊的字符,但是他找不到提及这件事的提法,我也不能......?

+0

'“\ n”而不是“\ n”'错字? – sawa 2011-05-19 03:19:33

+0

你可以尝试逃离换行吗? – 2011-05-19 05:18:49

+0

这本应该是\\ n,显然你需要在\\\ n中打出来让它显示正确。 – jpatokal 2012-06-18 03:17:21

回答

1

这可能不算什么,但不是PUT方法的意思是POST'在RESTful Rails中编辑? GET - 任何URL都应该是可重复的,而不需要对数据库进行任何更改。

如果您将AJAX调用更改为post,则还可以指示正确的内容类型application/json,以便Rails知道如何处理它。