【问题标题】:Controller action value not passing to javascript with Gon gem控制器动作值没有通过 Gon gem 传递给 javascript
【发布时间】:2018-09-01 14:46:31
【问题描述】:

这个问题让他很困惑。我有一个简单的表单,它有一个remote: true 方法。我只是试图从表单中获取用户输入并将其发送到 javascript 以供进一步使用。

/main/app/controllers/queries_controller.rb

在控制器中,当我使用 pry 时,我希望存在的所有值都存在,但是当将 gon 值发送到 javascript 时,它总是 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

我真的很难过这个,它困扰着我,因为它已经有几天了,我仍然没有得到预期的结果。任何帮助将不胜感激。

【问题讨论】:

  • 尝试使用 `` insead "" 作为 API 地址,在其中注入术语: url = "api.ritekit.com/v1/stats/history/#{term}?tags=&client_id=" 另外,将 github.com/deivid-rodriguez/byebug byebug 添加到您的gemfiles,然后在您登录 search_team 参数后立即添加“byebug”。如果它不为空,请将“byebug”标签放在下面一行并查看响应。我假设您的 api 没有回馈任何东西。 // 编辑:没有看到你正在使用 gon gem。不过,试试看。下面答案中的作者对gon有更多的了解。问候!

标签: javascript ruby-on-rails ruby ruby-on-rails-5 httparty


【解决方案1】:

据我所知gon 不允许这样做。或者至少没有通过 ajax 请求更新 gon 变量的开箱即用机制。他们有gon.watch,但它用于其他用例。

而且我认为你不需要它。当您的服务器使用 .js.erb 模板响应时,您已经可以访问 javascript 中的数据。您可以将@stats 变量作为&lt;%= @stats %&gt; 访问。不需要在那里使用gon

【讨论】:

  • 你是 100% 正确的,我能够访问我需要的值,而无需使用 js.erb 文件中的已消失 gem 使用 &lt;%= raw @stats.to_json %&gt;。感谢您朝正确的方向注视着我,我真的很感激!
猜你喜欢
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
相关资源
最近更新 更多