【问题标题】:Value not getting passed to controller after post request发布请求后值未传递给控制器
【发布时间】:2014-02-10 22:12:55
【问题描述】:

我正在尝试使用 ajax 进行简单的 post call,表单包含一个语言标识符、一个 i18n 键和一个字符串翻译值。

我的路线设置如下:

post '/translate/' => 'pages#translate'

出于测试目的,在PagesController::translate 我只是调用:

render json: params

在我的咖啡脚本中,我使用了以下代码:

console.log $form.serialize()
$.post $form.attr('action'), $form.serialize(),
    (json) ->
        console.log json
        return
, 'json'

我正在使用以下 HAML 来输出表单:

%div#translation-control
    = form_tag '/translate/', :method => "post" do
        = hidden_field_tag :translationlang, I18n.locale
        = select_tag :translationkey, options_for_select(get_all_translations().invert())
        = text_area_tag(:translationvalue, '', :rows => '1')
        = button_tag "Add"

在我的日志中我看到:

translationlang=en&translationkey=home.welcome&translationvalue=Welcome+to+this+site
Object {
    action: "translate"
    controller: "pages"
    translationlang: "en"
}

我尝试了几种不同的方法来设置我的路线,包括:

post '/translate/:translationlang/:translationkey/:translationvalue' => 'pages#translate'

match '/translate/:translationlang/:translationkey/:translationvalue' => 'pages#translate', 
:constraints => { :translationkey => /[\w\_\-\.]+/, :translationvalue => /.*/ },
via: [:post]

但似乎没有任何效果。为什么translationkeytranslationvalue 没有被传递给控制器​​?

【问题讨论】:

    标签: ruby-on-rails post ruby-on-rails-4


    【解决方案1】:

    本来要写评论的,不过这样会更清楚:


    .to_json

    你试过.to_json吗? This answer 似乎很能接受这个想法:

    render json: params.to_json
    

    如果做不到这一点,您是否考虑过只测试静态文本:

    render "hello".to_json ?
    

    控制器

    您确定将正确的数据/参数发送到您的控制器吗?一些好的反馈将是您的请求日志

    【讨论】:

    • 谢谢,我看了一下请求,参数没有被传递,jQuery 似乎以某种方式弄乱了序列化方法。不太清楚发生了什么,但在 $.post 方法之前调用了 serialize() (而不是直接传递它)并且正确的参数通过了。
    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多