【问题标题】:How to use ajax send data to controller in ruby on rails如何在 ruby​​ on rails 中使用 ajax 向控制器发送数据
【发布时间】:2014-08-23 07:53:54
【问题描述】:

我是 ROR 的新开发人员。我使用带有事件更改的 ajax 将数据从 show.html.erb 中的 select_tag 发送到 def show ... end 中的控制器。我尝试发送数据,但我的脚本不起作用。下面是我的脚本:

<script type="text/javascript">
    $('#cbo').change(function() {
       $.ajax({
        url: "/product_details/show",
        type: "POST",
        data: {"cbo_id" : $('#cbo').val()},
        dataType: "html",
        success: function(data) {
          alert('successfully');
        }
      });
    });
</script>

在product_details/show.html.erb中

<%= form_tag(product_detail_path, :method => "post") do %>
  <%= select_tag "categories", options_from_collection_for_select(Category.all, :id,     :category_name),:id => 'cbo' %>
<% end %>

def show
  @getcbo = params[:cbo_id]
end

我认为 url: "/product_details/show" 可能是错误的。那么我如何使用 url 将数据发送到 def show ...结束于控制器? 。请帮我 !

【问题讨论】:

  • 为你写答案 - 很多改变
  • 你能帮我改一下吗?我想得到关于我的问题的答案
  • 是的,这就是我为你写答案的原因,哈哈
  • 好的,谢谢。我在等你的答复

标签: ruby-on-rails ruby


【解决方案1】:

很多事情你需要调整


MVC

首先,让我解释一下 ajax 调用应该在 Rails 中是如何工作的

因为 Rails 是基于 MVC (model view controller) programming pattern - 你需要围绕它构建你的应用程序。对于许多新手开发人员来说,问题是要理解这一点有点棘手 - 可以相对简单地学习一些东西:

如您所见,MVC 基本上将“控制器”置于派对的中心。您必须明白,在 MVC 应用程序中,您的请求不会首先进入“视图”(正如许多人认为的那样)——它们会进入 控制器,该控制器从 构建相关数据>model,然后为你渲染 view

因此,每当您向 MVC 应用程序发送请求时,您都需要记住以您的控制器操作(而不是您的视图)为基础

--

Ajax

我不知道你对ajax (Asynchronous Javascript and XML) 有多少经验,但如果你没有多少经验,让我解释一下。

Ajax 基本上只是一种在浏览器中创建“伪请求”的方法。通过“伪请求”,我的意思是它本质上会从您的“正常”应用程序的典型流程中发送另一个请求:

因为HTTP is "stateless"(即,它不会保留任何设置/“状态”),所以如果没有网络套接字之类的东西,就无法提供“实时”连接。

Ajax 为您提供了在典型加载过程完成后发送和接收数据的能力,使您看起来像是在“实时”接收数据。实际上,您只是向您的应用发送一个伪请求(永远记住 Ajax 不是魔法)


代码

您的代码需要在几个地方更改

--

首先,您需要make your javascript unobtrusive(即从您的视图中删除它并放入您的资产管道)

#app/assets/javascripts/application.js
$(document).on("change", "#cbo", function() {
   $.ajax({
   url: "/product_details/show",
   type: "POST",
   data: {"cbo_id" : $(this).val()},
   dataType: "json",
   success: function(data) {
       alert('successfully');
     }
   });
});

#app/controllers/product_details_controller.rb
Class ProductDetailsController < ApplicationController
   respond_to :js, :json, :html

   def show
      @product = Product.find params[:id]
      respond_with @product
   end
end

这将使您能够接收您在控制器中设置的产品 JSON 对象,这是一个非常基本的示例。

如果你给我一些关于你想要达到的目标的更多信息,我一定会给你一个更完善的解决方案;希望上面的代码演示了 MVC 原理是如何工作的等等

【讨论】:

  • 非常感谢您的回答。但它还没有工作。当我使用 url 时在 ajax 中:"/product_details/" 我可以将数据发送到 def index...在控制器中结束。但是当使用 url : "/product_details/show" 我的脚本不起作用,无法将数据发送到 def show ...end.please 再次帮助我
  • 哈哈对不起。我被解释迷住了,我忘记了细节 - /show 不存在!
  • 您能否描述一下为什么要将数据发送到 show 操作。 /show 不存在 - 它必须是 /product_details/:id - 它会将您带到 show 操作(根据 MVC)
  • 因为我是在show.html.erb中做的,所以我必须从def show...end中获取变量。
  • 厚脸皮的反对票 - 我知道答案相当广泛;你不妨给我一些指点
猜你喜欢
  • 2016-08-02
  • 1970-01-01
  • 2014-08-24
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2017-04-29
相关资源
最近更新 更多