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