在AJAX请求后设计出来

时间:2012-12-11 16:41:25

标签: ruby-on-rails ajax ruby-on-rails-3 devise

我正在执行一些AJAX请求来添加或删除一些对象。像这样的东西:

的javascript

jQuery.getJSON("/apps/remove_screenshot/' + screenshot_id, function(result) {
    if (result.status == 'ok') {
        screenshot_container.remove() 
    }
});

控制器

class AppsController < ApplicationController
  load_and_authorize_resource
  check_authorization

  # ...

  def remove_screenshot
    # ...
  end
end

配置/初始化/ devise.rb

config.http_authenticatable = true
# config.http_authenticatable_on_xhr = true
config.navigational_formats = [:html, :json]

问题是,请求成功执行。但是当我重新加载执行请求的页面时,我得到了访问权限错误。

但是,我需要在执行remove_screenshot操作时检查身份验证。

我该如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:2)

修复了这一堆代码(并使用类似代码重写所有非jQuery AJAX请求):

$(function(){
    $.ajaxSetup({
        beforeSend: function( xhr ) {
            var token = $('meta[name="csrf-token"]').attr('content');
            if (token) xhr.setRequestHeader('X-CSRF-Token', token);
        }
    });
});

我的一些jQuery插件发送了AJAX请求而没有发送CSRF令牌。

答案 1 :(得分:0)

你很可能搞砸了一些小事。你只需要知道你做了什么,这里有几个地方可以看;

确保您的application.html.erb具有以下内容;

<%= csrf_meta_tag %>

然后;

<%= javascript_include_tag "application" %>

并确保application.js(在您的/app/assets/javascripts文件夹中);

//= require jquery
//= require jquery_ujs