2017-04-22 36 views
0

HTML頁面本身的軌道4應用程序:在我無法傳遞CSRF令牌答案jQuery的

<head> 
    ... 
    <%= csrf_meta_tags %> 
    ... 
</head> 

的jQuery:

$(".on_click").click(function() { 
    $("#spinner").show(); 

    var token = $('meta[name="csrf-token"]').attr('content'); 
    var ans = $(this).attr('ans'); 
    var url = ... + "/?ans=" + ans + "&_csrf=" + token; 

    $.post(url, function(html) { 
     $("#spinner").hide(); 
    }); 
}); 

UPDATE:

糟糕!忘了提錯誤:Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)

在此先感謝。

+0

您遇到了什麼問題?你有錯誤嗎?我猜想它需要在POST有效負載中發送,而不是URL。 – ceejayoz

+1

我建議使用Ajax而不是$ .post,所以你可以在發送答案之前設置一個請求頭。 –

+1

@Hipady'$ .post'進行AJAX調用。你的意思是'$ .ajax'? – ceejayoz

回答

2

您可以設置令牌在這樣的方式,所有發送請求:

$.ajaxSetup({ 
    headers: { 
    'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 

或特定要求,如您:

$.ajax({ 
    url: 'YOUR URL HERE', 
    type: 'POST', 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))}, 
     data: //data here, 
     success: function(response) { 
     //some code 
     } 
    } 
}); 
+0

@ceejayoz和Hp,我只是做了一個普通的,舊的$ .post ...沒有使用$ .ajax。使用$ .post時沒有辦法發送令牌嗎?如果不是,那麼我當然會使用常規的$ .ajax並設置類型。使用$ .ajax代替$ .post有更多的安全性嗎? – Jay

+1

@Jay如果你希望能夠處理錯誤,發送或者不管成功的調用完成或失敗,$。員額()只支持一個成功回調,其中$。阿賈克斯()支持beforeSend,成功之前做一些事情,錯誤和完整的回調。我通常更喜歡總是使用$ .ajax() –