我試圖從ie9到我的rails應用程序的跨域請求,我需要手動解析POST的主體,因爲ie9的XDR對象限制我們可以發送到text/plain
的contentType,而不是(見this post)。最初我剛剛使用控制器提供的params
散列,但是一旦我在我的ajax請求中限制contentType和dataType,那個散列不再包含正確的信息。
在上面的評論(link)之後,我瞭解瞭如何恢復該信息。作者提到在軌道控制器中,我們總是可以訪問request
變量,該變量爲我們提供了ActionDispatch::Request object的一個實例。我試圖使用request.query_string
來獲取請求主體,但是它只是返回一個空字符串。然而,在API中窺探一下,發現了raw_post方法。該方法正是我所需要的!
要「手動解析它」,您可以迭代由request.raw_post
返回的字符串並執行任何您想要的操作,但我不建議這樣做。我使用Rack :: Utils.parse_nested_query,如Arthur Gunn對this question的回答中所述,將raw_post解析爲散列。一旦它以散列形式出現,就可以在其中推出您需要的任何其他內容,然後將其與params散列合併。這樣做意味着我不必在控制器中改變其他任何東西!
params.merge!(Rack::Utils.parse_nested_query(request.raw_post))
希望能幫助別人!
我發現一些有用的東西:http://rails.nuvvo.com/lesson/6377-action-controller-the-request-and-response-objects – jchenjc