9

我最近切换到谷歌关闭一个新项目。我在将真实性令牌添加到 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。

更新:

日志:

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)
4

2 回答 2

16

在 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'
            });
于 2010-06-29T13:44:10.503 回答
2

Rails 现在会自动为其添加元标记,因此您可以在页面中使用 javascript:

 token = $( 'meta[name="csrf-token"]' ).attr( 'content' )
于 2016-12-12T21:48:19.237 回答