There is no perfect backwards compatible solution out there afaik, but this is getting me pretty close to where I want it to be.
- instead of redirecting set a empty 278 response (made up status code) for xhr requests
- tell jquery to redirect when receiving a 278 response
- the success handlers are still executed / there is no way to stop them, but they can either just insert the blank reply or do a
!= ''
check
// application.js // when we get a fake redirect response, go there // this will still execute success handlers, but hopefully the fail or are not ugly ... $.ajaxSetup({ statusCode: { 278: function(_,_,response){ // using turbolinks to not lose back functionality Turbolinks.visit(response.getResponseHeader('X-278-redirect')); } } })
# some controller redirect_to_with_xhr signup_path # application_controller.rb # ajax requests follow all redirects, so we have to improvise with a # special code and header to not get placeholders replaced with full pages. def redirect_to_with_xhr(path) if request.xhr? response.headers["X-278-redirect"] = path head 278 else redirect_to path end end
Tagged: Javascript, jQuery, Rails, Ruby Image may be NSFW.
Clik here to view.

Clik here to view.
