2016-08-01 17 views
2

我正在尝试创建一个允许用户提交评论的应用程序。如何成功保存在轨道上接收为POST-红宝石的json对象

我用survey.js它会返回响应JSON对象,这里是将请求发送到所需的URL咖啡脚本文件:

$.ajax({ 
    type:'POST', 
    url: "/surveys/save", 
    data: survey.data, 
    success: alert("saved"), 
    dataType: JSON 

在我控制我尝试保存适当的参数:

def create 
    if validate_user 
     @submission = Submission.new(submission_params) 
     if @submission.save 
     redirect_to '/surveys/saved' 
     else 
     redirect_to '/surveys/nosaved' 
     end 
    end 
end 

但是我看到来自服务器的输出:

"Started POST "/surveys/save" for ::1 at 2016-08-01 00:21:47 -0400 
Processing by SurveysController#create as */* 
    Parameters: {"question1"=>"eh", "question2"=>"1", "question3"=>"3", "question4"=>"1", "question5"=>"1", "question6"=>"3", "question7"=>"4", "question8"=>"1", "question9"=>"2", "question10"=>"1"} 
Can't verify CSRF token authenticity" 

请指教,从我的研究中看来,我需要在我的请求中加上真实性标记,但我不知道如何去做。

谢谢!

****更新**

我确实有CSRF meta标签在我的应用程序布局文件

******更新2 *******

我在Coffee脚本中尝试了以下内容,导致了相同的输出。

$.ajax({ 
    type:'POST', 
    beforeSend: test = (xhr)-> return xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf token"]').attr('content')) 
    url: "/surveys/save", 
    data: survey.data, 
    success: alert("saved"), 
    dataType: JSON 


    }); 
+0

你可以验证你是否有这样的行:'<%= csrf_meta_tag%>'布局文件中的某处,例如'application.html.erb'? – kasperite

回答

0

解决方案与Abid试图做的一样,但只需在咖啡脚本中声明头文件即可。

$.ajax({ 
    type:'POST', 
    headers: {'X-CSRF-Token': $('meta[name="csrf token"]').attr('content')}, 
    url: "/surveys/save", 
    data: survey.data, 
    success: alert("saved"), 
    dataType: JSON 
    }) 
0

下面的步骤将为你做的伎俩。

  1. 请确保您的应用程序布局文件中有csrf_meta标记。
  2. 添加之前发送到所有ajax请求设置标题如下。

    $就({ 类型: 'POST', beforeSend:功能(XHR){ 返回xhr.setRequestHeader( 'X-CSRF令牌',$(“元[名称= ”CSRF令牌“] ').attr(' 内容“));} , URL: ”/调查/保存“, 数据:survey.data, 数据类型:JSON, 成功:警报( ”拯救“) });

+0

感谢您的回应,它似乎就是我想做的事情,但我相信您的编辑是Javascript,我尝试了下面的使用js2coffee脚本转换器我怕任何事情发生,服务器没有吐出任何提交时发送的消息。 ('content'))。$ .ajax({'POST', beforeSend:setRequestHeader('X-CSRF-Token',$('meta [name =“csrf token”]')。 URL: “/调查/保存”, 数据:survey.data, 成功:警报( “拯救”), 数据类型:JSON });' – learningthings