2016-05-14 127 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個小時。 –