【问题标题】:Rails 5 not rendering JQuery resultRails 5 不呈现 JQuery 结果
【发布时间】:2017-10-19 19:24:31
【问题描述】:

我想我在 JQuery 和我的 Rails 实践中搞砸了,我打算从“form_tag”中获取两个参数,然后在视图中的“”中呈现我的控制器中生成的计算结果,我得到了结果网络视图(Chrome 开发者工具),但 .这是相关的代码: 路线:

get '/calculator', to: 'users#bmi_calc'

users_controller.rb:

def bmi_calc
  bmi_table = {
  "Very severely underweight"             => { from: 0.0, to: 15.0 },
  "Severely underweight"                  => { from: 15.1, to: 16.0 },
  "Underweight"                           => { from: 16.1, to: 18.5 },
  "Normal (healthy weight)"               => { from: 18.51, to: 25.0 },
  "Overweight"                            => { from: 25.1, to: 30.0 },
  "Obese class I (moderately obese)"      => { from: 30.1, to: 35.0 },
  "Obese class II (severely obese)"       => { from: 35.1, to: 40.0 },
  "Obese class III (very severely obese)" => { from: 40.1, to: 60.0 },
  "Pure fat factor"                       => { from: 60.1, to: 100.0}
  }
  weight = params[:mass].to_f
  height = params[:height].to_f
  if weight > 0 && height > 0
    resultado = ''
    @bmi = weight / height ** 2
    bmi_table.each do |advice, range|
      if (@bmi > range[:from]) && (@bmi < range[:to])
        resultado = advice
      end
    end
    respond_to do |format|
      format.json { render json: {resultado: resultado} }
    end
  else
    redirect_to current_user
  end
end

users.js.erb:

$(document).ready( function(){
  $("#calculator-img").click( function(){
    $.getJSON('/calculator', function(data) {
      var res = data.resultado;
      $("#bmi-result").html(res);
    });
  });
});

用户/show.html.erb:

<div class="row">
  <aside class="col-md-4">
    <section class="user_info">
      <h1><%= @user.name %></h1>
    </section>
    <section class="bmi_form">
      <%= render 'bmi_form' %>
    </section>

    <div id="bmi-result">

    </div>
  </aside>
  <div class="col-md-6">
    <section class="mid_section">
      <p>Some text</p>
      <h2>BMI standard table</h2>
      <%= image_tag "BMItable.png", alt: "BMI stardard table" %>
    </section>
  </div>
</div>

_bmi_form.html.erb:

<%= form_tag calculator_path, method: "get", remote: true, class: "navbar-left" do %>
  <%= label_tag :mass, "Your mass (weight) in Kg" %>
  <%= number_field_tag :mass, params[:mass], step: 0.01, class: "form-control" %>

  <%= label_tag :height, "Your height in meters" %>
  <%= number_field_tag :height, params[:height], step: 0.01, class: "form-control" %>

  <%= image_submit_tag("BMI.gif", id: "calculator-img") %>
<% end %>

最后,这是我在 Chrome 开发者工具中得到的:

请帮助我了解我做错了什么。谢谢 (这是我打算解决的挑战:https://gist.github.com/JonaMX/d29a754ae625664b0cf7 最后我交付了,但我不得不用结果渲染一个新页面......一点也不漂亮)

【问题讨论】:

  • 首先检查你的 JavaScript 是否运行。设置console.log("Something");alert("Something")。您已将表单设置为remote: true,这意味着只需按submit 即可完成ajax 请求,而不仅仅是onclick 事件。这在请求标头中也可见。如果Accept=application/json 则由您的 JSON 请求完成。如果 Rails 使用 remote: true 事件处理它,我相信它正在请求 Accept=application/javascript,但不要引用我的话。

标签: javascript jquery ruby-on-rails ruby


【解决方案1】:

您需要将处理函数绑定到表单的 ajax 请求。 首先在表单中添加一个 id:

<%= form_tag calculator_path, method: "get", remote: true, class: "navbar-left", id: "bmi-form" do %>
  <%= label_tag :mass, "Your mass (weight) in Kg" %>
  <%= number_field_tag :mass, params[:mass], step: 0.01, class: "form-control" %>

  <%= label_tag :height, "Your height in meters" %>
  <%= number_field_tag :height, params[:height], step: 0.01, class: "form-control" %>

  <%= image_submit_tag("BMI.gif", id: "calculator-img") %>
<% end %>

然后将您的 javascript 更改为以下内容:

$(document).ready( function(){
  $("#bmi-form").on( "ajax:success", function(evt, data, status, xhr){
    var res = data.resultado;
    $("#bmi-result").html(res);
  });
});

欲了解更多信息,请参阅http://guides.rubyonrails.org/working_with_javascript_in_rails.html

【讨论】:

    【解决方案2】:

    这段代码可以试一次

    $(document).ready( function(){
          $("#calculator-img").click( function(){
              $.getJSON('/calculator', function(data) {
                  var res = $.parseJSON(data);
                  $("#bmi-result").html(res.resultado);
              });
          });
       });
    

    欲了解更多信息,请参阅https://boxoverflow.com/get-json-jquery-ajax/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多