2012-12-11 65 views
0

我正在執行一些AJAX請求來添加或刪除一些對象。的類似: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操作時檢查身份驗證。

我該如何解決這個問題?

謝謝!

+0

[Duplicate?](http://stackoverflow.com/a/5052453/583263) – Magicmarkker

+0

nope。一切都已經完成;另外,會議立即未過期 - 控制器驗證通過。 – shybovycha

+0

@KateGregory哦,那個評論的諷刺... :)你也確定你的佈局文件的head標籤中包含了你的CSRF安全令牌嗎? – Noz

回答

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令牌。

0

你很可能搞砸了一些小事。你只需要知道你做了什麼,這裏有幾個地方要看;

確保您的application.html.erb具有以下內容;

<%= csrf_meta_tag %> 

然後;

<%= javascript_include_tag "application" %> 

,並確保application.js(在/app/assets/javascripts文件夾)的;

//= require jquery 
//= require jquery_ujs 
+0

您是否發現該問題? (我看到你編輯了我的答案?) – Jamsi

+0

不。你所描述的一切都已經完成了。這與我的問題下的兩個評論相同=) – shybovycha