2017-03-17 93 views
0

我试图建立一个索引页采用模态中显示的形式。形式与POST行动JS提交后,将触发#create行动与redirect_to行动#index也为JS回应,这样的ActionController :: InvalidCrossOriginRequest对重定向用GET

def create 
    @output = Output.new(output_params) 

    respond_to do |format| 
    if @output.save 
     format.html { redirect_to @output, notice: 'Output was successfully created.' } 
     format.json { render :show, status: :created, location: @output } 
     format.js { redirect_to production_line_path @output.machine.production_line, machine_id: @output.machine_id, format: :js } 
    else 
     format.html { render :new } 
     format.json { render json: @output.errors, status: :unprocessable_entity } 
    end 
    end 
end 

我的问题是,这给出了以下描述

安全错误警告:在另一个网站上嵌入<script>标签请求受保护的JavaScript。如果您知道自己在做什么,请继续并禁用此操作的伪造保护,以允许跨源JavaScript嵌入。

完成422无法处理的实体中为35ms。(浏览次数:27.2ms | ActiveRecord的:为1.5ms)

的ActionController :: InvalidCrossOriginRequest(安全警告:在其他网站上的嵌入式<script>标签请求的受保护的JavaScript如果你知道你的”再这样做,继续前进,在这个行动,允许跨域的JavaScript嵌入禁止伪造保护):

我不知道如果我想这样做的错误的方式。我是否必须更改JS的响应而不重定向,而是从相同的控制器动作#create呈现?

+1

你为什么重定向在'format.js'呈现一个JS文件的呢? – emaillenin

+0

@emaillenin - 不知道,因为我写的,我不知道这是做这种正确的方法。起初我以为我应该从我想要显示的模型的控制器中调用渲染动作。 – adass

回答

1

您可以使用内置的redirect_to的,并通过它的路径和参数,可以,也可以使用JS重定向。如果你想重定向做到这一点:

render js: "window.location.pathname = #{production_line_path @output.machine.production_line, machine_id: @output.machine_id}" 
0

我想我发现了InvalidCrossOriginRequest错误的原因是什么。错误我的表单发送JS请求没有标记通常是由UJS Rails适配器自动添加,但如果使用它。

我的表格缺少remote: true,而是包含format: :js,这让我觉得我使用的是UJS Rails适配器,并且我的POST请求带有CSRF保护所需的令牌。更多在Cross-Site Request Forgery (CSRF)