控制器操作值未传递给 javascript 和 Gon gem
Controller action value not passing to javascript with Gon gem
这个问题让他很困惑。我有一个简单的表单,它有一个 remote: true
方法。我只是想从表单中获取用户输入并将其发送到 javascript 以供进一步使用。
/main/app/controllers/queries_controller.rb
在控制器中,当我使用 pry 时,我期望的所有值都在那里,但是当涉及到发送到 javascript 的 gon 值时,它总是 undefined
.
def index
search_term = params[:query]
@stats = Query.api_response(search_term)
gon.stats = @stats
respond_to do |format|
format.js
format.html
end
end
/main/app/models/query.rb
class Query < ApplicationRecord
def self.api_response(term)
url = "https://api.ritekit.com/v1/stats/history/#{term}?tags=&client_id="
api = "1234567890123456789"
return HTTParty.get(url + api)
end
end
views/shared/_form.html.erb
<%= form_tag queries_path, method: :get, remote: true do %>
<%= text_field_tag :query %><br>
<%= submit_tag 'Search' %>
<% end %>
/main/app/views/queries/index.js.erb
发送到控制台时未定义此值。
$(document).ready(function(){
console.log(gon.stats)
});
/main/app/views/layouts/application.html.erb
<!DOCTYPE html>
<html lang="en">
<head>
<%= include_gon %>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/plug-ins/1.10.19/api/sum().js"></script>
<link href="https://fonts.googleapis.com/css?family=Righteous" rel="stylesheet">
</head>
我也试过了
<%= content_tag "div", id: "foobar", data: {value: @stats} do %><% end %>
当我使用 jQuery 访问它时也得到了 undefined
。
我真的被这个问题难住了,这让我很困扰,因为已经过了几天,我仍然没有得到预期的结果。任何帮助将不胜感激。
据我所知gon
不允许这样做。或者至少没有通过 ajax 请求更新 gon
变量的现成机制。他们有 gon.watch
,但它用于其他用例。
而且我认为您不需要它。当您的服务器响应 .js.erb
模板时,您已经可以访问 javascript 中的数据。您可以访问 @stats
变量作为 <%= @stats %>
。不需要在那里使用 gon
。
这个问题让他很困惑。我有一个简单的表单,它有一个 remote: true
方法。我只是想从表单中获取用户输入并将其发送到 javascript 以供进一步使用。
/main/app/controllers/queries_controller.rb
在控制器中,当我使用 pry 时,我期望的所有值都在那里,但是当涉及到发送到 javascript 的 gon 值时,它总是 undefined
.
def index
search_term = params[:query]
@stats = Query.api_response(search_term)
gon.stats = @stats
respond_to do |format|
format.js
format.html
end
end
/main/app/models/query.rb
class Query < ApplicationRecord
def self.api_response(term)
url = "https://api.ritekit.com/v1/stats/history/#{term}?tags=&client_id="
api = "1234567890123456789"
return HTTParty.get(url + api)
end
end
views/shared/_form.html.erb
<%= form_tag queries_path, method: :get, remote: true do %>
<%= text_field_tag :query %><br>
<%= submit_tag 'Search' %>
<% end %>
/main/app/views/queries/index.js.erb
发送到控制台时未定义此值。
$(document).ready(function(){
console.log(gon.stats)
});
/main/app/views/layouts/application.html.erb
<!DOCTYPE html>
<html lang="en">
<head>
<%= include_gon %>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/plug-ins/1.10.19/api/sum().js"></script>
<link href="https://fonts.googleapis.com/css?family=Righteous" rel="stylesheet">
</head>
我也试过了
<%= content_tag "div", id: "foobar", data: {value: @stats} do %><% end %>
当我使用 jQuery 访问它时也得到了 undefined
。
我真的被这个问题难住了,这让我很困扰,因为已经过了几天,我仍然没有得到预期的结果。任何帮助将不胜感激。
据我所知gon
不允许这样做。或者至少没有通过 ajax 请求更新 gon
变量的现成机制。他们有 gon.watch
,但它用于其他用例。
而且我认为您不需要它。当您的服务器响应 .js.erb
模板时,您已经可以访问 javascript 中的数据。您可以访问 @stats
变量作为 <%= @stats %>
。不需要在那里使用 gon
。