如何允许我从某些嵌入式 JavaScript 中使用 AJAX 请求 Rails 部分

问题描述

我的 rails 站点中嵌入了一个 js.D3 图,我正在尝试发送 AJAX 请求,以便 Rails 使用新数据重新加载 div。

我对 JavaScript 方面的经验不是很丰富。我习惯于使用 rails helpers 发出请求(例如 link_to ... remote: true)

相反,我试图从嵌入式 JS 发送 GET 请求,如下所示:

function loadPage(id) {
  var xhttp = new XMLHttpRequest();
  xhttp.open("GET","/center_node",true);
  xhttp.send();
}

在 Rails 方面我有:routes.rb

get '/center_node',to: 'static_pages#center_node'

center_node.js.erb

$("#map_and_oval").html(" <%= j render 'static_pages/test'  %> ");

static_pages_controller.rb

def center_node
    # render plain: "Ya sent a GET to the right server #{request.params}"
    respond_to do |format|
      format.js { render layout: false }
    end
  end

当我交换评论以便它只是“渲染简单”时,我可以看到服务器处理操作,因此我知道我正在与服务器交谈并获得响应。

但是如果我尝试回复,我会收到这条消息:

ActionController::InvalidCrossOriginRequest(安全警告:请求的另一个站点上的嵌入标记 受保护的 JavaScript。如果您知道自己在做什么,请继续 禁用此操作的伪造保护以允许跨源 JavaScript 嵌入。):

actionpack (6.0.0) lib/action_controller/Metal/request_forgery_protection.rb:268:in `verify_same_origin_request'

检查网络告诉我这是一个:“422 无法处理的实体”

我没有收到错误信息

skip_before_action :verify_authenticity_token,only: :center_node

虽然我仍然没有得到想要的结果,因为它没有用测试部分替换 div。

我该怎么办?是否可以像这样安全地从 JavaScript 请求 rails 操作?即使来自同一个应用并使用相同的网址,我是否需要提供一些真实性?

我在 rails csrf-countermeasures 中读到:

使用其他库进行ajax调用时,需要添加 安全令牌作为库中 Ajax 调用认标头。 要获取令牌,请查看由 打印的标签 应用视图。

我是否需要将标签传递给 JS 端并将其放入 AJAX 请求中?我正在使用视图来传递 JSON。如果我把令牌放进去,别人会看不到吗?

或者有更好的方法解决这个问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)