gpt4 book ai didi

ruby-on-rails - 如何使用 ajax 将数据发送到 ruby​​ on rails 中的 Controller

转载 作者:数据小太阳 更新时间:2023-10-29 07:20:26 24 4
gpt4 key购买 nike

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

<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 ... 在 Controller 中结束? 。请帮我 !

最佳答案

很多事情你需要调整


MVC

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

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

enter image description here

如您所见,MVC 基本上将“ Controller ”置于聚会的中心。您必须明白,在 MVC 应用程序中,您的请求不会首先进入“ View ”(正如许多人认为的那样)——它们会进入 Controller ,后者从构建相关数据>建模,然后为您呈现 View

因此,无论何时向 MVC 应用程序发送请求,都需要记住以 Controller 操作(而不是 View )为基础

--

Ajax

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

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

enter image description here

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

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


代码

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

--

首先,您需要make your javascript unobtrusive (IE 将其从您的 View 中删除并放入您的 Assets 管道中)

#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

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

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

关于ruby-on-rails - 如何使用 ajax 将数据发送到 ruby​​ on rails 中的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25459743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com