Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 路由错误:没有与[选项]匹配的路由_Ruby On Rails_Ruby_Ajax - Fatal编程技术网

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选项,它就可以工作。我开始[选择]。。。没有路线匹配。