Ruby on Rails jQuery未调用正确的控制器操作
ruby on rails jquery not calling the right controller action
我阅读了开始发布此问题时弹出的所有答案,但它们似乎没有解决我的问题。
我在控制器中添加了一个名为 get_results 的新操作(除了通过脚手架创建的操作之外(,但每次我更改选择菜单中的选项时,它都会引导我"编辑"操作,而不是"get_results",
这是 js
<script type="text/JavaScript">
$(function(){
$('.menu_class').bind('change', function(){
$.ajax('#{:controller => "my_tests", :action => "get_results"}?param_one=' + $(this).val());
});
});
</script>
编辑:这是对我有用的js代码,感谢罗宾在下面的回答:
<script type="text/JavaScript">
$(function(){
$('.menu_class').bind('change', function(){
$.ajax({
url: "<%= get_results_my_tests_url %>",
data: {
param_one: $(this).val()
}
});
});
});
</script>
这是我添加的操作(片段(
def get_results
# some stuff goes here
respond_to do |format|
if @my_test.update_attributes(params[:my_test])
format.html
format.js
else
format.html { render :action => "update" }
format.json { render :json => @my_test.errors, :status => :unprocessable_entity }
end
end
end
我在 routes.rb 中添加了一条特定的路由
MyTests::Application.routes.draw do
resources :my_tests
get "home/index"
match '/my_tests/get_results' => 'my_tests#get_results', :as => :get_results
match ':controller(/:action(/:id(.:format)))'
root :to => 'home#index'
end
编辑:这是对我有用的路由配置,感谢罗宾在下面的回答:
resources :my_tests do
collection do
get :get_results
end
end
耙子路线给了我这个
my_tests GET /my_tests(.:format) {:action=>"index", :controller=>"my_tests"}
POST /my_tests(.:format) {:action=>"create", :controller=>"my_tests"}
new_my_test GET /my_tests/new(.:format) {:action=>"new", :controller=>"my_tests"}
edit_my_test GET /my_tests/:id/edit(.:format) {:action=>"edit", :controller=>"my_tests"}
my_test GET /my_tests/:id(.:format) {:action=>"show", :controller=>"my_tests"}
PUT /my_tests/:id(.:format) {:action=>"update", :controller=>"my_tests"}
DELETE /my_tests/:id(.:format) {:action=>"destroy", :controller=>"my_tests"}
home_index GET /home/index(.:format) {:action=>"index", :controller=>"home"}
get_results /my_tests/get_results(.:format) {:action=>"get_results", :controller=>"my_tests"}
/:controller(/:action(/:id(.:format)))
root / {:action=>"index", :controller=>"home"}
那么,为什么它总是引导我"编辑"操作而不是"get_results"呢?
试试这个:
你的JavaScript应该是
<script type="text/JavaScript">
$(function(){
$('.menu_class').bind('change', function(){
$.ajax({
url: "<%= get_results_my_tests_url %>",
data: {
param_one: $(this).val()
}
});
});
});
</script>
您的路线:
resources :my_tests do
# if "/my_tests/get_results" is really what you want
collection do
get :get_results
end
#if "/my_tests/1/get_results" is what you actually want
#it would make more sense, especially because you have @my_test in the controller
member do
get :get_results
end
end
$.ajax('#{:controller => "my_tests", :action => "get_results"}?param_one=' + $(this).val());
由于该代码段中没有 ERB,因此上面的内容只是 JS 中的普通字符串。它将构造一个网址,如下所示:
http://example.com/the_current_page#{:controller => "my_tests", :action => ....
并且 #
之后的 URL 部分不会发送到服务器。在网络面板中查看它,应该很清楚发生了什么。
相关文章:
- 当通过AJAX调用时,控制器操作不会执行
- 检查是否存在任意控制器/操作
- RubyonRails环境控制器操作JavaScript响应
- 控制器操作的路由问题
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- ASP.Net MVC 脚本无法使用控制器的默认操作 URL.使用控制器/操作 URL 也是如此
- 在 AJAX 调用的 zend 控制器操作中正确设置会话
- 有没有办法从 javascript 函数调用控制器操作
- 如何使用 Minitest 触发 JS 控制器操作
- Yii2中的Ajax+控制器操作
- 如何在Javascript事件上触发rails控制器操作
- ASP.NET MVC:2d数组在从javascript传递到MVC控制器操作后为null
- 如何将JavaScript文件路径映射到ASP.Net MVC控制器操作
- Rails控制器操作可以同时处理html和javascript请求吗
- Laravel 4:通过控制器操作ajax数据
- 在视图中未使用Javascript调用控制器操作
- 如何使用ROR从控制器操作调用javascript函数
- 在视图中重定向会破坏原始控制器操作(Yii)
- 控制器操作参数未从 AJAX 开机自检正确填充
- MVC $.ajax 调用从不对编辑执行控制器操作,但在添加时有效