Ruby on rails 路由错误:没有与[选项]匹配的路由
当我尝试设置请求头令牌时,我收到一个错误:Ruby on rails 路由错误:没有与[选项]匹配的路由,ruby-on-rails,ruby,ajax,Ruby On Rails,Ruby,Ajax,当我尝试设置请求头令牌时,我收到一个错误: ActionController::RoutingError(没有与[选项]“/data]匹配的路由): 以下是ajax调用: $.ajax({ url: this.hostName + url, type: 'POST', data: data, dataType: 'json', beforeSend: function( xhr ) { xhr.setRequestHeader( 'X-CS
ActionController::RoutingError(没有与[选项]“/data]匹配的路由):
以下是ajax调用:
$.ajax({
url: this.hostName + url,
type: 'POST',
data: data,
dataType: 'json',
beforeSend: function( xhr ) {
xhr.setRequestHeader( 'X-CSRF-Token', $( 'meta[name="csrf-token"]' ).attr( 'content' ) );
},
success: function(response) {
console.log('success');
console.log(response);
},
error: function(response) {
console.log('error');
console.log(response);
}
});
如果我不使用请求标头:
于2012-07-24 18:37:22-0700发布了127.0.0.1版的“/data”
但我得到一个警告说:
警告:无法验证CSRF令牌的真实性
你知道为什么会这样吗?你试过了吗
$.ajax({
url: this.hostName + url,
type: 'POST',
headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') }
data: { param : 'something' },
dataType: 'json'
});
然后在控制器中,params[:param]会给你“一些东西”
如果你有兴趣知道为什么你需要所有的X-CSRF-Token的东西,这是一个很好的阅读。基本上,Rails会自动在页面中包含该令牌,以确保应用程序的安全。如果您查看站点的任何页面,您将在HTML文档的头部看到如下内容:
<meta content="guma1QdmO9Tn9SB4yV4DonkY4xf4Sy6lIvrFyHIaR1U=" name="csrf-token">
$.ajaxSetup({
type: 'POST',
headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') }
dataType: 'json'
});
现在,无论何时您想要发送请求,您只需要以下内容:
$.ajax({
url: this.hostName + url,
data: { param : 'something' }
});
编辑:啊,我明白了。执行警报(this.hostName+url)
时会得到什么?你是如何申报路线的?因为如果我没记错的话,你可以使用相对URL而不是绝对URL,你不需要根部分。下面是一个例子:
# routes.rb
post "relative_url" => 'controller#action'
# file.js
$.ajax({
url: "relative_url",
data: { param : 'something' }
});
你试过了吗
$.ajax({
url: this.hostName + url,
type: 'POST',
headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') }
data: { param : 'something' },
dataType: 'json'
});
然后在控制器中,params[:param]会给你“一些东西”
如果你有兴趣知道为什么你需要所有的X-CSRF-Token的东西,这是一个很好的阅读。基本上,Rails会自动在页面中包含该令牌,以确保应用程序的安全。如果您查看站点的任何页面,您将在HTML文档的头部看到如下内容:
<meta content="guma1QdmO9Tn9SB4yV4DonkY4xf4Sy6lIvrFyHIaR1U=" name="csrf-token">
$.ajaxSetup({
type: 'POST',
headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') }
dataType: 'json'
});
现在,无论何时您想要发送请求,您只需要以下内容:
$.ajax({
url: this.hostName + url,
data: { param : 'something' }
});
编辑:啊,我明白了。执行警报(this.hostName+url)
时会得到什么?你是如何申报路线的?因为如果我没记错的话,你可以使用相对URL而不是绝对URL,你不需要根部分。下面是一个例子:
# routes.rb
post "relative_url" => 'controller#action'
# file.js
$.ajax({
url: "relative_url",
data: { param : 'something' }
});
在ajax中,您应该尝试给出相对url,而不是绝对url。我也遇到了同样的问题,通过更改url,您应该尝试在ajax中给出相对url,而不是绝对url。我也遇到了同样的问题,我通过更改url来工作,不确定代码的上下文,但我想我会指出,以防您不知道,并且它符合您的需要。是的@Ashitaka,请参阅接受的答案。不确定代码的上下文,但我想我会指出,以防您不知道并且它符合您的需要。是的@Ashitaka,请参阅已接受的答案。感谢您提供了广泛的答案,但它仍然无法解决我的问题。当我在中添加头时,我得到一个路由错误(如上所述)。我收到的错误不是“Started POST/data”,而是“Started[OPTIONS]/data”,并且没有与[OPTIONS]匹配的路由。同样的问题,但这并没有解决它。我的ajax调用是跨域调用(使用CORS),只要我不在ajax设置中设置headers选项,它就可以工作。我开始[选择]。。。没有路线匹配。谢谢你的广泛回答,但它仍然不能解决我的问题。当我在中添加头时,我得到一个路由错误(如上所述)。我收到的错误不是“Started POST/data”,而是“Started[OPTIONS]/data”,并且没有与[OPTIONS]匹配的路由。同样的问题,但这并没有解决它。我的ajax调用是跨域调用(使用CORS),只要我不在ajax设置中设置headers选项,它就可以工作。我开始[选择]。。。没有路线匹配。