gpt4 book ai didi

javascript - AJAX 请求无法从 Rails 应用程序中的 Controller 获取实例变量

转载 作者:行者123 更新时间:2023-11-29 19:34:40 25 4
gpt4 key购买 nike

我正在尝试将数据从我的 Controller 获取到 rails 应用程序中的 javascript 文件中。 html 使用选择选项和组织 ID 作为参数立即调用 ajax 请求。

在我的 before_filter 中

def set_org_id
if params[:id].present?
@org_id = klass.find(params[:id]).id
else
@org_id = 0
end
end

在我的 js 文件中:

$.ajax({ url: "/admin/analytics/filter",
type: 'GET',
data: {
time_frame: selectedId,
organization_id: <%= @org_id %>
}
})

如果我将一个数字硬编码为 organization_id 一切正常,但是当我尝试从之前的过滤器传递数据时,我最终在页面中没有 id。

我应该补充一点,索引路由是 admin/analytics/。过滤器操作是 admin/analytics/filter。用户永远不会导航到该页面,只有 ajax 命中过滤器路由以获取相关数据。这可能是在设置实例变量之前发送ajax请求吗?如果是这样,正确的解决方案是什么?

最佳答案

您的 JS 将无法访问您的@instance 变量除非您从 Controller 本身调用它们。这里的问题是,如果您正在加载 ajax 来访问实例 varialbe - 这根本行不通。

让我解释一下......


JS

Javascript被称为客户端语言 - 这意味着它使您能够访问 HTML/DOM 中的元素。相对不受惩罚。这里的问题是 Rails/Ruby 与 PHP 非常相似,是服务器端,因此只能向您的浏览器提供呈现数据

这意味着调用下面的方法是行不通的:

data: {
time_frame: selectedId,
organization_id: <%= @org_id %>
}

如前所述,这是因为您无法从 Javascript 访问 @org_id。首先,您不知道是否会设置 @org_id 变量(如果您想使用 Rails 助手),其次,您的 JS 无论如何都无法访问该变量(因为它是 Rails)

--

修复

解决此问题的最简单方法是以某种方式在 DOM 中创建您需要的数据。我从你的回答中看到你为你的表单设置了一个隐藏字段。一个更好的方法是 set an HTML5 "data" attribute使用id

你最好这样做:

<%= form_tag route_path, data: { org_id: @org_id } %>

这将使您能够调用:

$(document).on("submit", "form", function(){
$.ajax({
...
data: {
time_frame: selectedId,
organization_id: $(this).data("org_id")
}
});
});

关于javascript - AJAX 请求无法从 Rails 应用程序中的 Controller 获取实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25716353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com