【问题标题】:How to render JSON from an ajax request in rails?如何从 Rails 中的 ajax 请求呈现 JSON?
【发布时间】:2016-06-05 04:21:29
【问题描述】:

我认为 (sales.html.erb):

$('#Comprar').click(function(){    
        var table = tableToJson();    
        if (table.length == 0) 
          alert("No hay productos para comprar");
        else {
    // alert(JSON.stringify(table));
          $.ajax({
            url: "<%= products_sales_path %>",
            type: "GET",
            dataType: "json",
            data: JSON.stringify(table),
            complete: function() {
                    alert("Done!");
                  }        
            });
        }     
      });

tableToJson() 是一个函数,它从已经格式化为 JSON Image 的表中返回某些信息。 products_sales_pathsales.html.erb 的查看路线。但是,我不确定如何使用 $.ajax() 方法将 JSON 发送到 rails 服务器并进行渲染。我的控制器中有这个(products_controller.rb):

def sales
    if request.xhr?    
      render :json => @product
    else
      @products = Product.all
      filter = params[:search]
      if filter.blank?
        @products = Product.all
      else
        @products=Product.where("lower(nombre) LIKE ? OR lower(presentacion) LIKE ?", "%#{params[:search].downcase}%", "%#{params[:search].downcase}%")
      end    
    end
  end

我认为render :json =&gt; @product 可以满足我的需要,但它不起作用!而且我还想不通。感谢您的帮助。

【问题讨论】:

  • 如果您执行p @product,您会在控制台中看到什么?
  • 我应该在哪里写这个?在控制器中?如果是这样,在控制台中并没有什么特别的,只是:GET XHR http://localhost:3000/products/sales [HTTP/1.1 304 Not Modified 8ms] GET XHR http://localhost:3000/products/sales
  • 我必须假设它没有被调用,因为没有任何可能是实例变量的东西出现在你的控制台中。也许检查 if 语句?

标签: ruby-on-rails json ajax


【解决方案1】:

请检查此以进行渲染:

render :json => { :success => true,:product => @product.as_json() }

【讨论】:

  • 我已将render :json =&gt; @product 替换为您的代码,但没有任何反应。我已经在 Firefox 中修改了控制台,它请求 get 方法和代码 304(未修改),链接:http://localhost:3000/products/sales?[{"id":"5","Nombre":"Tea","Presentación":"Botella de 500 mL","Precio":"1800.0","Cantidad ":"1","Subtotal":"1800.00"},{"nproductos":"1","precioTotal":"1800.00","fpago":"De contado"}] 但尚未渲染JSON :-(
【解决方案2】:

您可以使用$.ajax$.get 来请求它。

JS:

$(document).ready(function() {
    $('#Comprar').click(function(){    
    var table = tableToJson();    
    if (table.length == 0){
      alert("No hay productos para comprar");
    } else {
      $.get("<%= products_sales_path %>", function( data ) {
        // alert("Done");
        console.log("Data: ", data);
      }, "json" );
    }
  });
})

控制器:

def sales
    @products = Product.all
    if request.xhr?
      render status: 200, json: {
            products: @products
      }.to_json
    else
      @products = params[:search].blank? ? @products : Product.where("lower(nombre) LIKE ? OR lower(presentacion) LIKE ?", "%#{params[:search].downcase}%", "%#{params[:search].downcase}%")
    end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多