Ruby on rails 3 来自jQuery的AJAX请求在Rails处理中缺少参数

Ruby on rails 3 来自jQuery的AJAX请求在Rails处理中缺少参数,ruby-on-rails-3,jquery,params,Ruby On Rails 3,Jquery,Params,我正在处理jQuery和Rails3.1之间的AJAX请求(现在,在localhost上工作,在Chrome和Firefox上测试,如果这有帮助的话)。当用户单击链接时,我会将两个文本字段的值传递给服务器。具体来说,我有一个名为answerscoontroller的控制器,它将这两个值存储到“answers”数据库表中 下面是我提出请求的前端代码。Rails成功地接收到了请求,因为该请求中的响应函数发生了,我的“last_chance”一段由服务器响应的内容填充 $('.other_questi

我正在处理jQuery和Rails3.1之间的AJAX请求(现在,在localhost上工作,在Chrome和Firefox上测试,如果这有帮助的话)。当用户单击链接时,我会将两个文本字段的值传递给服务器。具体来说,我有一个名为answerscoontroller的控制器,它将这两个值存储到“answers”数据库表中

下面是我提出请求的前端代码。Rails成功地接收到了请求,因为该请求中的响应函数发生了,我的“last_chance”一段由服务器响应的内容填充

$('.other_question a').click(function(e) {          
        var this_profile_id = window.location.pathname.substring(1).split('/')[1];
        var this_question_id = window.location.pathname.substring(1).split('/')[3]; // there is a hidden space when splitting

        var ajax_data = {
            type : "PUT", /* should this be POST for older browsers? */
            url : '/profiles/' + this_profile_id + '/answers/' + this_question_id + '.json',
            contentType : 'json',
            dataType : 'json',
            success : function(msg) {
                alert("Data Saved: " + msg );
                $('#last_chance').text(msg['saved']);
            },
            data : {
                _method : 'PUT',
                page : {
                    authenticity_token : $('input[name=authenticity_token]').attr('value'),
                    answer : {
                        response : 'hi there',
                        comments : 'word'
                    },

                    action : 'update',
                    controller : 'answers',
                    profile_id : this_profile_id,
                    id : this_question_id
                }                   
            }               
        };
        $.ajax(ajax_data);
        return false;

    });
以下是我处理此问题的后端代码:方法在AnswersController中更新:

def update
    respond_to do |format|
       format.html { redirect_to 'http://google.com'}
       format.json { render :json => {:saved => 'ok: ' + params.to_s }.to_json }
     end

    return
end
现在,当我用Rails接收到的参数填充“last_chance”段落元素时,它显示如下:

ok: {"action"=>"update", "controller"=>"answers", "profile_id"=>"11", "id"=>"42", "format"=>"json"}
看起来,除非发生了我不知道的事情,否则Rails不会接受或接收我在AJAX调用中包含的其他参数。有人能解释一下为什么会这样吗?我如何确保它收到所有包含的参数

提前非常感谢您的帮助

哦,还有:我删除了所有的数据参数,并返回了相同的结果(我想这意味着Rails会处理返回的参数)。但是我怎样才能传递数据呢?这些自定义参数去了哪里

编辑:根据回复的建议,我将其更改为:

    params[:saved] = 'OK'
    respond_to do |format|
        format.html { redirect_to 'http://google.com'}
        format.json { render :json => params.to_json }
    end

从这里,我在“最后的机会”部分得到的唯一输出是“OK”。从这里可以到哪里去?

在渲染之前尝试添加其他参数,例如:

params[:saved] = 'ok: '
format.json { render :json => params.to_json }

ajax请求的类型参数应该是'POST',您可以使用_methoddata参数专门为rails后端设置它。如果这不能解决问题,你能发布你的相关路线吗?啊,不要设置contentType,因为默认设置适合您的用例。

嗨,Vik,谢谢您的回复。我试过了,把结果放在我第一篇文章的编辑部分。看来params散列是空的。从这里我可以去哪里?如果params散列是空的,那么如何得到响应:确定:{“action”=>“update”,“controller”=>“answers”,“profile_id”=>“11”,“id”=>“42”,“format”=>“json”}。只需调试参数并在添加新参数之前和之后打印其值[:saved]=“OK”。并检查您的日志。嗨,维克-我想我可能在您对这一部分的建议中做了一些错误的更改。但是我改变了它,所有的数据都从“页面”移到了“数据”本身,现在一切似乎都正常了。感谢您的贡献。另外,我必须删除contentType参数-我看到这是在早期的线程中完成的,所以我首先尝试了它-这不起作用。嗨,mosch-它现在可以使用PUT作为类型。如果我将其更改为POST(建议这样做吗?),我是否应该为POST添加另一条指向我的更新操作的路径?或者Rails可以通过我的hidden_方法param自动做到这一点吗?在我看来,Rails根本没有解析您的POST数据,所以它可能会将请求解释为GET请求?由于不清楚浏览器在设置类型“PUT”时会做什么,我宁愿使用“POST”和_方法:“PUT”,这是Rails的解决方法。