Javascript 我可以为js ajax调用使用路由路径吗?
我有一个ajax调用,可以在Javascript 我可以为js ajax调用使用路由路径吗?,javascript,ruby-on-rails,ajax,ruby-on-rails-4,url-routing,Javascript,Ruby On Rails,Ajax,Ruby On Rails 4,Url Routing,我有一个ajax调用,可以在.js文件中使用: ... update: function(){ $.ajax({ url: '/groups/order_links', ... 但我更愿意走这条路 我设置了文件扩展名.js.erb,并尝试添加: ... update: function(){ $.ajax({ url: "#{order_links_groups_path}", ... 或 但无论哪种情况,我都会得到一个404-[HTTP/1.1 4
.js
文件中使用:
...
update: function(){
$.ajax({
url: '/groups/order_links',
...
但我更愿意走这条路
我设置了文件扩展名.js.erb
,并尝试添加:
...
update: function(){
$.ajax({
url: "#{order_links_groups_path}",
...
或
但无论哪种情况,我都会得到一个404-[HTTP/1.1 404找不到76ms]
从
帖子http://localhost:3000/groups/49
rake路由
显示我的路由包括:
...
PUT /groups/:group_id/links/:id(.:format) links#update
DELETE /groups/:group_id/links/:id(.:format) links#destroy
order_links_groups POST /groups/order_links(.:format) groups#order_links
groups GET /groups(.:format) groups#index
POST /groups(.:format) groups#create
new_group GET /groups/new(.:format) groups#new
edit_group GET /groups/:id/edit(.:format) groups#edit
定义为:
resources :groups do
resources :links
collection do
post 'order_links'
end
end
组\u控制器
具有
class GroupsController < ApplicationController
...
def order_links
params[:link].each_with_index do |id, index|
Link.where(id: id).update_all(['position = ?',index+1])
end
render :nothing => true
end
...
类组控制器true
结束
...
Rails 4.1“#{}”
用于Coffeescript中的字符串插值,因此我假设这是一个错误。我假设发出此ajax请求的url是http://localhost:3000/groups/49
因为如果您没有传入正确的url,它将使用当前路径
“
将在ruby中查找变量。这会起作用,但编译assets目录中的JavaScript文件时没有使用应用程序上下文。意思是,order\u links\u groups\u path
将未定义
这里的答案应该有帮助:
网址:“
首先,让我为您解释一些事情:
--
Mime类型
控制器级别的Rails进程(不是中间件)
这意味着,如果希望通过ajax的js
mime类型请求资源,则必须在控制器中定义其处理,而不是路由结构
您将能够阅读更多关于Rails如何处理mime类型的内容:
如果客户机需要HTML,我们只需将它们重定向回此人
列表如果他们想要JavaScript,那么这是一个Ajax请求,我们
呈现与此操作关联的JavaScript模板。最后,如果
客户机需要XML,我们将创建的人呈现为XML,但使用
twist:我们还在呈现的XML中包含此人的公司,因此
你会得到像
这意味着,如果您希望处理JS响应,则可以执行以下操作:
#app/controllers/groups_controller.rb
class GroupsController < ApplicationController
def order_links
...
respond_to do |format|
format.js
format.html
end
end
end
这将路由javascript请求,允许您根据需要在控制器中处理mime类型 似乎是一个很好的解决方案,但是我得到了#(in/home/durrantm/Dropnot/webs/rails\u apps/linker/app/assets/javascripts/sortable\u hook.js.erb)的
未定义的局部变量或方法'order\u links\u groups\u path'。我还尝试了order\u links\u groups\u url
并得到了相同的错误。顺便说一句,我确实更改了控制器,添加了格式块。仅供参考,我正在使用.js.erb
的url:
是否与.js.erb
模板相同(您的示例是coffeescript)?我也尝试过,但它给出了相同的错误。嘿,Michael,你有时间聊一下吗?我验证了这在RubyonRails4.1应用程序上是有效的。
<% url = MyRailsApp::Application.routes.url_helpers %>
url: "<%= url.order_links_groups_url %>"
#app/controllers/groups_controller.rb
class GroupsController < ApplicationController
def order_links
...
respond_to do |format|
format.js
format.html
end
end
end
#app/assets/javascripts/application.js.coffee
update: function(){
$.ajax({
url: <%= order_links_groups_path %>,
...