Я пытался сделать междоменный запрос из ie9 в мое приложение rails, и мне нужно было вручную проанализировать тело POST, потому что XDR-объект ie9 ограничивает contentType, который мы можем отправить text/plain
, а не application/x-www-urlencoded
(см. этот пост ). Первоначально я только что использовал хеш params
, предоставленный контроллером, но как только я ограничил contentType и dataType в моем запросе ajax, этот хеш больше не содержал нужную информацию.
Следуя URL-адресу в комментарии выше ( ссылка ), я узнал, как восстановить эту информацию. Автор упоминает, что в контроллере rails у нас всегда есть доступ к переменной request
, которая дает нам экземпляр ActionDispatch :: Request объекта . Я пытался использовать request.query_string
, чтобы получить тело запроса, но это только вернуло пустую строку. Немного слежки в API, однако, обнаружили метод raw_post . Этот метод вернул именно то, что мне было нужно!
Чтобы "разобрать его вручную", вы можете перебрать строку, возвращаемую request.raw_post
, и делать все, что хотите, но я не рекомендую этого. Я использовал Rack :: Utils.parse_nested_query, как предложено в ответе Артура Ганна на этот вопрос , чтобы проанализировать raw_post в хеш. Как только он будет в хеш-форме, вы можете добавить туда все, что вам нужно, а затем объединить его с хешем params. Это означало, что мне не нужно больше ничего менять в контроллере!
params.merge!(Rack::Utils.parse_nested_query(request.raw_post))
Надеюсь, это кому-нибудь поможет!