我有一个形式,我想用Ajax调用只从一个JavaScript函数调用轨控制器的方法。但没能做到这一点。请检查下面我code。
payment.html.erb:
<脚本类型=文/ JavaScript的>
功能check_dropdown(){
$阿贾克斯({
网址:/支付/ check_type
键入:GET
});
}
< / SCRIPT>
<%=的form_for:付款:URL => {:动作=> check_type},远程:真做| F | %>
< DIV CLASS =totalaligndiv>
< DIV CLASS =输入组bmargindiv1 COL-MD-6拉左><跨度类=输入组插件文本左>< DIV CLASS =leftsidetextwidth>类型: < / DIV>< / SPAN>
<%= f.select(:s_catagory,options_for_select(['木','木'],['普佳Samagree','普佳Samagree'],['扫','扫'],['照片图示,照片绘图],['燃烧的助理,燃烧的助理'],选择类型),{},{:类=>'的形式控制,:的onchange =>'check_dropdown ();'})%>
< / DIV>
< DIV CLASS =输入组bmargindiv1 COL-MD-6拉左><跨度类=输入组插件文本左>< DIV CLASS =leftsidetextwidth>选择供应商:LT; / DIV>< / SPAN>
< DIV ID =名称 - 选项>
< / DIV>
< / DIV>
< DIV CLASS =clearfix>< / DIV>
< DIV CLASS =tbpaddingdiv1文本中心>
<按钮类型=提交级=BTN BTN-成功>提交< /按钮>
< / DIV>
< / DIV>
<%结束%GT;
application.html.erb:
<!DOCTYPE HTML>
< HTML>
< HEAD>
<冠军> SwargadwaraPuri< /标题>
<脚本的src =/资产/力矩与 - locales.js>< / SCRIPT>
<%= stylesheet_link_tag应用程序,:媒体=> 所有的%>
<%= javascript_include_tag应用程序%>
&其中;%= csrf_meta_tags%GT;
<脚本的src =/资产/ bootstrap.min-2.0.js>< / SCRIPT>
<脚本的src =/资产/引导-datetimepicker.js>< / SCRIPT>
<链接相对=图标的href =/资产/ favicon.png类型=图像/ X-图标/>
<链接相对=样式表的href =/资产/引导-2.0.css>
<链接相对=样式表的href =/资产/插件,2.0.css>
<链接相对=样式表的href =/资产/主2.0.css>
<链接相对=样式表的href =/资源/主题,2.0.css>
<链接相对=样式表的href =/资产/引导-datetimepicker.css>
< /头>
<体类=登录无动画>
<%=收率%>
<页脚>
< DIV CLASS =右拉>
维持<我类=发发铅笔文字危险>< / I>以<强>< A HREF =http://www.oditeksolutions.com目标=_空白> Oditek解决方案< / A>< / STRONG>
< / DIV>
< DIV CLASS =拉左>
<跨度ID =一年拷贝>< / SPAN> &功放;复印件; <强>< A HREF =JavaScript的:无效(0)目标=_空白> Swargadwar,普里市< / A>< / STRONG>
< / DIV>
< /页脚>
< / DIV>
&所述; A HREF =#ID =至顶>&所述; I类=发发-字形向上>&所述; / I>&所述; / a取代;
<脚本类型=文/ JavaScript的SRC =/资产/引导-filestyle.min.js>< / SCRIPT>
<脚本的src =/资产/插件,2.0.js>< / SCRIPT>
<脚本的src =/资产/主2.0.js>< / SCRIPT>
< /身体GT;
< / HTML>
routes.rb中:
获得金/ check_type=> 金#check_type
payments_controller.rb:
类PaymentsController<的ApplicationController
高清付款
@支付= Vendor.new
respond_to代码做|格式|
的format.html
format.js
结束
结束
高清check_type
如果PARAMS [:付款] [:s_catagory]
@支付= Vendor.find_by_s_catagory(PARAMS [:付款] [:s_catagory])
@ v_name = Vendor.where(:s_catagory => PARAMS [:付款] [:s_catagory]).pluck(:v_name)
结束
结束
结束
我要当的onchange
赛事将打响 check_type
方法将被调用。
我要当onchange事件将打响check_type方法调用。
应用程序/控制器/ payments_controller.rb:
类PaymentsController<的ApplicationController
高清付款
@vendor = Vendor.new
结束
高清check_type
把*****执行曾在这里达到了#这个会出现在你键入的窗口:轨道服务器
呈现平淡:响应好#Return东西Ajax请求
结束
DEF创建#Submit的形式吗?
结束
结束
应用程序/视图/支付/ payment.html.erb:
<脚本>
功能check_dropdown(){
$获得(/支付/ check_type功能(data_from_server){
警报(服务器的响应是:+ data_from_server);
});
}
< / SCRIPT>
<%=的form_for(@vendor,网址:{行动:创造},方法:邮报)办| F | %>
&其中;%= f.select(
:s_category,
options_for_select([
['木','木'],
['法会Samagree','普佳Samagree'],
['扫','扫'],
['摄影师','摄影师'],
['燃烧助理,燃烧的助理'],扫),
{},
{
:类=> 表格控,
:的onchange => 'check_dropdown()'
}
)%>
&其中;%= f.submit%GT;
<%结束%GT;
这会产生这个网站:
<!DOCTYPE HTML>
< HTML>
< HEAD>
...
...
<元字符集=ISO-8859-1>
<冠军>无论< /标题>
< META NAME =CSRF-参数CONTENT =authenticity_token/>
< META NAME =CSRF令牌CONTENT =hvSXeSTq8PL8F6xOjzPlqWF1VGD9nANbKmjBJM / u6swmoee4F5zpfIMfc3iKP415 / IuUJhQ + D0yXVyxfvvu7sg ==/>
< /头>
<身体GT;
< DIV>应用布局和LT; / DIV>
<脚本>
功能check_dropdown(){
$获得(/支付/ check_type功能(response_from_server){
警报(服务器的响应是:+ response_from_server);
});
}
< / SCRIPT>
<窗体类=new_vendor
的id =new_vendor
行动=/金/创建
接收字符集=utf-8
方法=后>
<输入名称=UTF8
TYPE =隐藏
值=&放大器;#x2713; />
<输入类型=隐藏
NAME =authenticity_token
值=ZHPNwGmYHBfR5ay7ikXSMjcoJSfKd4eQP72I6bTfiI / EJr0BWu4Fma7tc42PSbriqtblYSPVi4eCgmWSxcrZ8Q ==/>
<选择类=表单控制
平变化=check_dropdown()
NAME =供应商[s_category]
的id =vendor_s_category>
<期权价值=木>木材LT; /选项>
<期权价值=法会Samagree>大法会Samagree< /选项>
<选项选择=选择值=清扫>扫地< /选项>
<期权价值=摄影师>摄影师< /选项>
<期权价值=燃烧助理>燃烧助理< /选项>
< /选择>
<输入类型=提交名称=提交值=创建供应商/>
< /形式GT;
< /身体GT;
< / HTML>
如果你不希望的在线的的JavaScript的onchange在html,这曾经被认为是不好的做法,你可以这样做:
应用程序/视图/支付/ payment.html.erb:
<%=的form_for(@vendor,网址:{行动:创造},方法:邮报)办| F | %>
&其中;%= f.select(
:s_category,
options_for_select([
['木','木'],
['法会Samagree','普佳Samagree'],
['扫','扫'],
['摄影师','摄影师'],
['燃烧助理,燃烧的助理'],扫),
{},
{:类=> 表格控}
)%>
&其中;%= f.submit%GT;
<%结束%GT;
<脚本>
功能check_dropdown(){
$获得(/支付/ check_type功能(data_from_server){
警报(服务器的响应是:+ data_from_server);
});
}
$(#vendor_s_category)上(变,check_dropdown)。
< / SCRIPT>
配置/ routes.rb中:
测试1 :: Application.routes.draw做
获得金/ check_type
获得支付/支付
邮政付款/创建
结束
DB /迁移/ 20150424194916_create_vendors.rb:
类CreateVendors< ActiveRecord的::迁移
高清变化
CREATE_TABLE:厂商的确| T |
t.string:s_category
t.string:位置
t.timestamps空:假的
结束
结束
选择而不是默认选择了不同的选择后,<选择>
,你会看到类似的服务器窗口如下:
入门掌握在2015年4月24日22点03分45秒-0600/金/ check_type为:: 1
处理由PaymentsController#check_type作为* / *
*****执行已到达这里
渲染文本模板(0.0ms)
完成200确定在3毫秒(浏览次数:2.2ms | ActiveRecord的:0.0ms)
和网页将推出警报()
显示文本:
服务器的响应是:好
I have a form and I want to call rails controller method using ajax call from a JavaScript function only. But failed to do this. Please check my code below.
payment.html.erb:
<script type="text/javascript">
function check_dropdown(){
$.ajax({
url: "/payments/check_type",
type: 'GET'
});
}
</script>
<%= form_for :payment,:url => {:action => "check_type" },remote: true do |f| %>
<div class="totalaligndiv">
<div class="input-group bmargindiv1 col-md-6 pull-left"><span class="input-group-addon text-left"><div class="leftsidetextwidth">Type :</div></span>
<%= f.select(:s_catagory,options_for_select([['Wood','Wood'],['Puja Samagree','Puja Samagree'],['Sweeper','Sweeper'],['Photo Grapher','Photo Grapher'],['Burning Assistant','Burning Assistant']],selected: "Type"),{},{:class => 'form-control',:onchange => 'check_dropdown();'}) %>
</div>
<div class="input-group bmargindiv1 col-md-6 pull-left"><span class="input-group-addon text-left"><div class="leftsidetextwidth">Select Vendor :</div></span>
<div id="name-option">
</div>
</div>
<div class="clearfix"></div>
<div class="tbpaddingdiv1 text-center">
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
<% end %>
application.html.erb:
<!DOCTYPE html>
<html>
<head>
<title>SwargadwaraPuri</title>
<script src="/assets/moment-with-locales.js"></script>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
<script src="/assets/bootstrap.min-2.0.js"></script>
<script src="/assets/bootstrap-datetimepicker.js"></script>
<link rel="icon" href="/assets/favicon.png" type="image/x-icon" />
<link rel="stylesheet" href="/assets/bootstrap-2.0.css">
<link rel="stylesheet" href="/assets/plugins-2.0.css">
<link rel="stylesheet" href="/assets/main-2.0.css">
<link rel="stylesheet" href="/assets/themes-2.0.css">
<link rel="stylesheet" href="/assets/bootstrap-datetimepicker.css">
</head>
<body class="login no-animation" >
<%= yield %>
<footer>
<div class="pull-right">
Maintained <i class="fa fa-pencil text-danger"></i> by <strong><a href="http://www.oditeksolutions.com" target="_blank">Oditek Solutions</a></strong>
</div>
<div class="pull-left">
<span id="year-copy"></span> © <strong><a href="javascript:void(0)" target="_blank">Swargadwar, Puri Municipality</a></strong>
</div>
</footer>
</div>
<a href="#" id="to-top"><i class="fa fa-chevron-up"></i></a>
<script type="text/javascript" src="/assets/bootstrap-filestyle.min.js"></script>
<script src="/assets/plugins-2.0.js"></script>
<script src="/assets/main-2.0.js"></script>
</body>
</html>
routes.rb:
get "payments/check_type" => "payments#check_type"
payments_controller.rb:
class PaymentsController < ApplicationController
def payment
@payment=Vendor.new
respond_to do |format|
format.html
format.js
end
end
def check_type
if params[:payment][:s_catagory]
@payment=Vendor.find_by_s_catagory(params[:payment][:s_catagory])
@v_name=Vendor.where(:s_catagory =>params[:payment][:s_catagory] ).pluck(:v_name)
end
end
end
I want when onchange
event will fired the check_type
method will be called.
I want when onchange event will fired the check_type method will call.
app/controllers/payments_controller.rb:
class PaymentsController < ApplicationController
def payment
@vendor = Vendor.new
end
def check_type
puts "*****Execution has reached here" #This will appear in the window where you typed: rails server
render plain: "Good" #Return something in response to the ajax request
end
def create #Submit the form to here?
end
end
app/views/payments/payment.html.erb:
<script>
function check_dropdown(){
$.get("/payments/check_type", function(data_from_server) {
alert("The server responded with: " + data_from_server);
});
}
</script>
<%= form_for(@vendor, url: {action: "create" }, method: "post") do |f| %>
<%= f.select(
:s_category,
options_for_select([
['Wood','Wood'],
['Puja Samagree','Puja Samagree'],
['Sweeper','Sweeper'],
['Photographer','Photographer'],
['Burning Assistant','Burning Assistant'] ], "Sweeper"),
{},
{
:class => 'form-control',
:onchange => 'check_dropdown()'
}
)%>
<%= f.submit %>
<% end %>
Which produces this html:
<!DOCTYPE html>
<html>
<head>
...
...
<meta charset="ISO-8859-1">
<title>Whatever</title>
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="hvSXeSTq8PL8F6xOjzPlqWF1VGD9nANbKmjBJM/u6swmoee4F5zpfIMfc3iKP415/IuUJhQ+D0yXVyxfvvu7sg==" />
</head>
<body>
<div>Application Layout</div>
<script>
function check_dropdown(){
$.get("/payments/check_type", function(response_from_server) {
alert("The server responded with: " + response_from_server);
});
}
</script>
<form class="new_vendor"
id="new_vendor"
action="/payments/create"
accept-charset="UTF-8"
method="post">
<input name="utf8"
type="hidden"
value="✓" />
<input type="hidden"
name="authenticity_token"
value="ZHPNwGmYHBfR5ay7ikXSMjcoJSfKd4eQP72I6bTfiI/EJr0BWu4Fma7tc42PSbriqtblYSPVi4eCgmWSxcrZ8Q==" />
<select class="form-control"
onchange="check_dropdown()"
name="vendor[s_category]"
id="vendor_s_category">
<option value="Wood">Wood</option>
<option value="Puja Samagree">Puja Samagree</option>
<option selected="selected" value="Sweeper">Sweeper</option>
<option value="Photographer">Photographer</option>
<option value="Burning Assistant">Burning Assistant</option>
</select>
<input type="submit" name="commit" value="Create Vendor" />
</form>
</body>
</html>
And if you don't want to inline the javascript onchange in the html, which used to be considered bad practice, you can do this:
app/views/payments/payment.html.erb:
<%= form_for(@vendor, url: {action: "create" }, method: "post") do |f| %>
<%= f.select(
:s_category,
options_for_select([
['Wood','Wood'],
['Puja Samagree','Puja Samagree'],
['Sweeper','Sweeper'],
['Photographer','Photographer'],
['Burning Assistant','Burning Assistant'] ], "Sweeper"),
{},
{:class => 'form-control'}
)%>
<%= f.submit %>
<% end %>
<script>
function check_dropdown(){
$.get("/payments/check_type", function(data_from_server) {
alert("The server responded with: " + data_from_server);
});
}
$("#vendor_s_category").on("change", check_dropdown);
</script>
config/routes.rb:
Test1::Application.routes.draw do
get 'payments/check_type'
get 'payments/payment'
post 'payments/create'
end
db/migrate/20150424194916_create_vendors.rb:
class CreateVendors < ActiveRecord::Migration
def change
create_table :vendors do |t|
t.string :s_category
t.string :location
t.timestamps null: false
end
end
After selecting a different choice than the default choice in the <select>
, you will see something like the following in the server window:
Started GET "/payments/check_type" for ::1 at 2015-04-24 22:03:45 -0600
Processing by PaymentsController#check_type as */*
*****Execution has reached here
Rendered text template (0.0ms)
Completed 200 OK in 3ms (Views: 2.2ms | ActiveRecord: 0.0ms)
And the webpage will launch an alert()
displaying the text:
The server responded with: Good