Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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 3 ajax中句柄注销重定向的设计_Ruby On Rails 3_Jquery_Devise - Fatal编程技术网

Ruby on rails 3 ajax中句柄注销重定向的设计

Ruby on rails 3 ajax中句柄注销重定向的设计,ruby-on-rails-3,jquery,devise,Ruby On Rails 3,Jquery,Devise,我有一个带有Rails/Desive服务器的主干.js客户端 我想用重定向实现注销过程 这是我的客户端代码 $.ajax url: "/sign_out" xhrFields: 'X-CSRF-Token': $('meta[name=csrf-token]').attr('content') type: "DELETE" complete: xCompleteFunction = (XMLHttpRequest, textStatus) -> #handl

我有一个带有Rails/Desive服务器的主干.js客户端

我想用重定向实现注销过程

这是我的客户端代码

$.ajax
  url: "/sign_out"
  xhrFields:
    'X-CSRF-Token': $('meta[name=csrf-token]').attr('content')
  type: "DELETE"
  complete: xCompleteFunction = (XMLHttpRequest, textStatus) ->
    #handle here?
请求由适当控制器的方法处理。那我有

  def after_sign_out_path_for(resource)
    root_path
  end   
这是日志

[2012/12/11 15:44:07] (INFO) 76430 Started DELETE "/sign_out"
[2012/12/11 15:44:07] (INFO) 76430 Processing by Devise::SessionsController#destroy as */*
....
[2012/12/11 15:44:07] (INFO) 76430 Redirected to http://localhost:3000/
hover,重定向由Rails控制器处理,实际上重定向使用了相同的动词“DELETE”


是否可以在客户端上处理重定向,并防止Rails控制器捕获它?我原以为Deave会因为ajax调用而将301/302返回给客户端。

我也在寻找这个问题的答案。我不太确定在发送第一个删除请求以注销用户之后,如何处理Desive发出的第二个重定向。但是我发现添加一个捕获401(未经授权)响应的ajax初始化代码可以解决这个问题

$.ajaxSetup({
  statusCode: {
    401: function(){
      // Redirect the to the login page.
      location.href = "/admin/auth/sign_in";
    }
  }
});

希望能有帮助。干杯。

我也在寻找这个问题的答案。我不太确定在发送第一个删除请求以注销用户之后,如何处理Desive发出的第二个重定向。但是我发现添加一个捕获401(未经授权)响应的ajax初始化代码可以解决这个问题

$.ajaxSetup({
  statusCode: {
    401: function(){
      // Redirect the to the login page.
      location.href = "/admin/auth/sign_in";
    }
  }
});

希望能有帮助。干杯。

之所以会出现这种情况,是因为默认情况下,您的Ajax调用遵循302(“临时移动”),而不是错误状态,而是在位置标头存在的情况下重试第二个请求

在js代码成功回调中更改状态并重定向到location头,或者返回nil位置并在客户端处理重定向


如果您想通过json和html区分登录,那么只需在控制器代码中添加self.request.format.symbol条件。

这是因为默认情况下,您的Ajax调用遵循302(“临时移动”),而不是错误状态,而是在存在位置标头的情况下重试第二个请求

在js代码成功回调中更改状态并重定向到location头,或者返回nil位置并在客户端处理重定向


如果您想通过json和html区分登录,只需在控制器代码中添加self.request.format.symbol上的条件。

我实际上也遇到了同样的问题。可以覆盖
designe::sessioncontroller
,我就是这样解决的

designe::sessioncontroller
中,有一个
#respond#u to_on_destroy
,它实际上实现了重定向。通过覆盖这个,它只有200个

class sessioncontroller

这样做有一个明显的问题,即覆盖像这样的私有方法不是很好(使用它的实现可能会在我们没有意识到的情况下发生变化),但我找不到任何其他方法可以很好地做到这一点。在这种情况下,如果Desive允许您进行渲染而不是重定向,那就太好了。

我实际上也遇到了同样的问题。可以覆盖
designe::sessioncontroller
,我就是这样解决的

designe::sessioncontroller
中,有一个
#respond#u to_on_destroy
,它实际上实现了重定向。通过覆盖这个,它只有200个

class sessioncontroller
这样做有一个明显的问题,即覆盖像这样的私有方法不是很好(使用它的实现可能会在我们没有意识到的情况下发生变化),但我找不到任何其他方法可以很好地做到这一点。如果Desive允许您在这种情况下进行渲染而不是重定向,那就太好了