js.erb 文件未呈现其内容

Posted

技术标签:

【中文标题】js.erb 文件未呈现其内容【英文标题】:js.erb file not rendering its contents 【发布时间】:2016-09-10 08:04:09 【问题描述】:

我想使用 js.erb 渲染一个谷歌图表。我从 python 脚本发出 POST 请求,将一些参数发送到我的 ruby​​ on rails 应用程序,该应用程序解析这些参数并使用它们来显示我想要的图表,但它没有显示任何内容。

  params_list = []
        params.each_pair |key, value|
          params_list.push([key,value])
        
        p params_list

        @image = Gchart.pie_3d(:size => '500x300',
                  :title => "Top 5 Results",
                  :legend => ["#params_list[0][0] #params_list[0][1]%" , 'source-document2 [22%]','source-document3','source-document4','source-document5'],
                  :data => [22, 21, 20, 18, 19])

        render :template => "deploy/results.js.erb", :locals => :image => @image 

results.js.erb

$("#chart").append("<p> <%= escape_javascript render(partial: 'home/chart', locals:  :image => @image ) %> </p> ");

但即使在控制台中显示,也没有任何显示

Rendered deploy/results.js.erb

Rails 控制台输出

Started POST "/results.js" for 131.227.46.134 at 2016-05-14 03:18:13 +0100

Processing by DeployController#results as JS
  Parameters: "results"=>"[('source-document01348.txt', 22), ('source-document01389.txt', 21), ('source-document01253.txt', 20),
 ('source-document01306.txt', 19), ('source-document01255.txt', 18)]"
  Rendered home/_chart.html.erb (0.1ms)
  Rendered deploy/results.js.erb (1.7ms)
Completed 200 OK in 9ms (Views: 8.4ms | ActiveRecord: 0.0ms)

发布请求的python代码

def send_results(results):
    url = "http://e786a82b.ngrok.io/results.js"
    data = 
        "results": results
    
    data = urllib.urlencode(data)
    req = urllib2.Request(url, data)

    # try:
    response = urllib2.urlopen(url, data)

注意:使用 ngrok 创建隧道,因为 python 不会发送到本地主机

【问题讨论】:

你能显示你在 python 脚本中收到的 POST 的输出吗?你能显示动作的整个输出吗? @MichaelGaskill 我在收到发布请求时发布了 rails 输出,不介意渲染 home_chart,我只是将 js.erb 中的 javascript 代码更改为部分渲染。 【参考方案1】:

不要通过文件名显式引用您的部分,试试这个:

render "deploy/results", :formats => [:js], :locals => :image => @image 

Rails 不知道您要通过文件名呈现什么,它通过上下文和格式来实现。指定 :formats 选项有助于 Rails 了解您的意图。

【讨论】:

仍然无法正常工作,在控制台中我看到它渲染但它没有显示任何内容。即使我只是输入警报(“测试”),这也会继续,它不会做任何事情。编辑:如果我尝试只使用一个带有 remote: true 的按钮来触发此操作,它就可以工作。猜猜我从 python 脚本发出 post 请求是怎么回事? Rails 使用 CSRF 令牌保护来防止跨站点脚本发送帖子。这可能是导致问题的原因,但我本以为在这种情况下它会发出错误信号。 我已经绕过了使用skip_before_action :verify_authenticity_token,问题是我得到了参数,只是由于某种原因我无法执行js.erb代码,这真的令人沮丧已经持续了2个小时。 当你说你得到“一无所有”时,这是什么意思?没有反应,就挂了?标题,但没有正文?标题,但一个空的身体?有 HTTP 状态码吗? 我通过 post 请求将参数从 python 发送到 rails 应用程序。 Rails 应用程序获取它们,将它们分配给 @image 变量,该变量被传递给 js.erb 文件并从那里传递给部分,这将呈现 image_tag @image,而在控制台中它说呈现 js.erb 和 _chart 部分,我在浏览器中看不到任何变化,但是当我使用remote: true 使用模型数据从轨道向上​​使用测试按钮进行测试运行时,一切正常并显示,这怎么可能?

以上是关于js.erb 文件未呈现其内容的主要内容,如果未能解决你的问题,请参考以下文章

Rails3 使用 text/html 内容类型而不是 text/javascript 呈现 js.erb 模板

Rails '.js.erb' 不呈现部分

Rails js.erb 不呈现部分文件但得到呈现的响应文件

Rails js.erb 文件未执行

渲染 js.erb 布局但 html.erb 视图文件

j渲染视图后Javascript不起作用