2017-06-04 30 views
0

我想添加ajax到rails沒有數據庫表格計算器。但它接縫不響應。它給了我204沒有內容服務器的答案。我試圖解決這個問題,但我卡住了。我的JavaScript知識是非常基礎的,所以詳細的回答會非常有幫助。沒有AJAX它工作正常,並通過所有測試。添加ajax到rails沒有數據庫表格計算器

計算器控制器

class InterestCalculatorController 
    def new   
    respond_to do |format| 
     format.html { render 'index.html.erb' } 
     format.js 
    end 

    # If accepted parameter is integer, then it shows in view as 5, when it 
    # is float, it shows as 5.1 
    @first_0 = params[:a_0].to_f % 1 != 0 ? params[:a_0].to_f : params[:a_0].to_i 
    @second_0 = params[:b_0].to_f % 1 != 0 ? params[:b_0].to_f : params[:b_0].to_i 

    # How many percent is number from the number 
    number_to_number(@first_0, @second_0) 

private 

    def number_to_number(a = 0, b = 0) 
    # If the first number is zero, it sends 0% answer. If the second number is zero 
    # and the first number is nonzero, it sends infinity. Otherwise simple formula calculation. 
    if a.zero? 
     @result_0 = 0 
    elsif b.zero? 
     @result_0 = "infinity" 
    else 
     @result_0 = a.to_f/b.to_f * 100 
    end 
    end 
end 

index.js.erb的

document.getElementById("answer_0").innerHTML = <%= @result_0 %> 

視圖index.html.erb

<h1>Interest Calculator</h1> 

<div id="interest_calculator_main"> 
    <div id="interest_calculator"> 
    <%= form_for :interest_calculator, url: { action: :new }, method: :get, remote: true do |f| %> 
     <p>Сколько % составляет число</p> 
     <%= number_field_tag :a_0, params[:a_0], step: :any, id: "first_number_0" %> 
     <p>от числа</p> 
     <%= number_field_tag :b_0, params[:b_0], step: :any, id: "second_number_0" %> 
     <%= f.submit 'Calculate!', id: "number_to_number" %> 
    <% end %> 

    <% unless @result_0.nil? %> 
     <p>Number <%= @first_0 %> from number <%= @second_0 %> = <label id="answer_0">%</label></p> 
    <% end %> 
    </div> 
</div> 

回答

2

你的形式提交給new動作,但你有沒有該動作的模板(即new.js.erb),所以你得到一個204 No Content反應,這應該顯示在你的服務器日誌如下:

發現InterestCalculatorController#新

無模板重命名index.js.erbnew.js.erb,你將不再得到這個錯誤。


也(不涉及這個錯誤),你可能會wan't在你現在new.js.erb文件,以更改<%= @result_0 %>"<%= @result_0 %>"

document.getElementById("answer_0").innerHTML = "<%= @result_0 %>" 

否則你的代碼將拋出另一個錯誤時@result_0設置到"infinity"

+0

重命名後,它給了我另一個錯誤 - 304沒有修改 –

+0

@KirillZhuravlov你可以顯示你的服務器日誌中的錯誤? – Gerry

+0

我的軌道控制檯顯示我沒有錯誤,但mozilla發送給我304錯誤,並且模板中沒有result_0答案。 –