2017-06-04 31 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答案。 –