В макете добавить это перед любой другой JS работает:
<script>
function authToken() {
return '<%= form_authenticity_token if protect_against_forgery? -%>';
}
</script>
authToken
кодируются как функция, так что это менее вероятно, вы случайно перезаписать его с другим JavaScript.
Альтернативно, как в Rails 3, токен аутентификации врезана как <meta>
тег, который вы можете прочитать с:
<script>
function authToken() {
return $('meta[name="csrf-token"]').attr('content');
}
</script>
В главной JS, вы можете позвонить authToken()
, и он вернется ваш токен аутентификации в качестве строки для включения в ваши вызовы Ajax. Например, с помощью JQuery:
$.ajax({
type: 'PUT',
url: url,
data: {
foo: bar,
authenticity_token: authToken()
},
complete: function(data) {}
});
Обратите внимание, что если вы используете Rails' встроенный в form_for
помощника, он автоматически добавляет маркер подлинности в скрытом ввода. Если вы хотите отправить все данные в форме, в том числе скрытой токен аутентификации, вы можете просто использовать:
var $form = $('form');
$.ajax({
url: $form.attr('action'),
type: $form.attr('method'),
// "get" or "post"; overridden by Rails' hidden "_method"
// input value, e.g., "put"
data: $form.serialize(),
// Includes hidden "authenticity_token" and "_method" inputs
complete: function(data) {}
});
Эта модель часто бывает полезно, когда вы уже написали форму, которая работает без JS, и вы повторное добавление ненавязчивого слоя JS, который просто отправляет данные формы через Ajax.
Отлично, спасибо тонне! Работал как шарм. –