2016-05-14 77 views
0

我想使用js.erb呈现谷歌图表。我从python脚本发出POST请求,将一些参数发送给我的ruby on rails应用程序,该应用程序解析这些参数并使用它们显示我想要的图形,但它不显示任何内容。js.erb文件未呈现其内容

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) 

的POST请求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创建一个隧道,如蟒蛇不会发送到本地主机

+0

你能显示你在Python脚本中收到的POST输出吗?你能展示整个行动的输出吗? –

+0

@MichaelGaskill我发布的轨道输出,当它收到发布请求,不介意渲染home_chart,我只是改变了js.erb我的JavaScript代码呈现部分。 –

回答

0

而不是明确的文件名指你的部分,试试这个:

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

Rails不知道你想要通过文件名渲染什么,它是通过上下文和格式来实现的。指定:formats选项可帮助Rails知道您的意图。

+0

仍然没有工作,在控制台中我看到它呈现,但它不显示任何东西。即使我只输入alert(“test”),它也不会执行任何操作。编辑:如果我尝试只是有一个按钮与远程:真正触发这个动作它的作品。猜猜它是做什么的,我从python脚本发出一个请求? –

+0

Rails使用CSRF令牌保护来防止跨站点脚本发送帖子。这可能是导致这个问题的原因,但我预料它会在这种情况下发出错误信号。 –

+0

我已经绕过使用'skip_before_action:verify_authenticity_token',事情是我得到的参数,只是由于某种原因,我不能执行js.erb代码,这真的是令人沮丧的是现在2个小时。 –