微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何允许我从某些嵌入式 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 举报,一经查实,本站将立刻删除。