9

我最近轉向Google關閉一個新項目。我無法將真實性標記添加到ajax調用中的標題中。我如何去做呢?如何添加真實性標記?

我的Ajax代碼段(使用goog.net.XhrIo類):

var initialHTMLContent = superField[i].getCleanContents(); 

var data = goog.Uri.QueryData.createFromMap(new goog.structs.Map({ 
    body: initialHTMLContent 
})); 

goog.net.XhrIo.send('/blogs/create', function(e) { 
    var xhr = /** @type {goog.net.XhrIo} */ (e.target); 
    alert(xhr.getResponseXml()); 
}, 'POST', data.toString(), { 
    'Accept' : 'text/xml' 
      }); 

在後端使用Rails。

UPDATE:

登錄:

Processing BlogsController#create (for 127.0.0.1 at 2010-06-29 20:18:46) [PUT] 
    Parameters: {"authenticity_token"=>""} 

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken): 


Rendered rescues/_trace (272.4ms) 
Rendered rescues/_request_and_response (1.2ms) 
Rendering rescues/layout (unprocessable_entity) 

回答

15

某處在Rails視圖(.html.erb文件),你可以設置這樣一個js變量:

window._token = '<%= form_authenticity_token %>'; 

而且然後將其附加在您的電話中:

goog.net.XhrIo.send('/blogs/create?authenticity_token=' + window._token, function(e) { 
    var xhr = /** @type {goog.net.XhrIo} */ (e.target); 
    alert(xhr.getResponseXml()); 
}, 'POST', data.toString(), { 
    'Accept' : 'text/xml' 
      }); 
+0

我得到一個'#<::雜種HttpParserError:無效的HTTP格式,解析失敗。>'。也許它沒有考慮身份驗證令牌?我用日誌更新了我的問題。 – 2010-06-29 13:57:45

+0

我已經更新了相應的答案。似乎你有一個普通的JavaScript文件中的這個調用。您需要在服務器上生成令牌,因此您需要在視圖中執行此操作。 – 2010-06-29 14:21:40

+0

我更新了我的問題。它沒有把認證令牌考慮在內。 – 2010-06-29 14:52:51

2

的Rails現在會自動添加一個meta標籤吧,所以後來在你的頁面的JavaScript,你可以使用:

token = $('meta[name="csrf-token"]').attr('content')