如何在Rails3和Javascript中将csrf令牌添加到$.destroy中
这与另一个问题有关,我认为这是问题的核心,但不确定如何解决 显然,我的$.destroy没有被传递必要的CSRF令牌 但我不知道如何将其包括在内 这是我的JS:如何在Rails3和Javascript中将csrf令牌添加到$.destroy中,javascript,jquery,ruby-on-rails,ruby-on-rails-3,csrf,Javascript,Jquery,Ruby On Rails,Ruby On Rails 3,Csrf,这与另一个问题有关,我认为这是问题的核心,但不确定如何解决 显然,我的$.destroy没有被传递必要的CSRF令牌 但我不知道如何将其包括在内 这是我的JS: var compv = { exists: true, tools: { exists: true, csrf_param: null, csrf_token: function() { }, clientError: function() { }
var compv = {
exists: true,
tools: {
exists: true,
csrf_param: null,
csrf_token: function() { },
clientError: function() { }
},
comments: {
exists: true,
updateView: null,
selectImage: null,
upvote: null,
edit: null,
cancelEdit:null,
downvote: null,
showVotes: null,
destroy: {
success: null,
error: null,
dialog: 'comment-destroy-dialog'
},
getUploadID: function(element) {
return $(element).parents("li").attr("data-upload-id");
}
},
steps: {
exists: true,
selectFn: {},
selectedClass: "selected-step",
selectableClass: "selectable-step",
selectedClient: {
element: null,
id: null,
stepType: "client",
ajaxSuccess: null
},
selectedProject: {
element: null,
id: null,
stepType: "project",
ajaxSuccess: null
},
selectedStage: {
element: null,
id: null,
stepType: "stage",
ajaxSuccess: null,
getID: function() {
return compv.steps.selectedStage.id;
},
displayCompare: function() {
window.open($(this).attr('data-url'), "_blank");
}
},
selectedUpload: {
element: null,
id: null,
stepType: "image",
primeUploadDisplay: null,
ajaxSuccess: null,
uploader: null,
noCloseDialog: false
}
}
};
compv.tools.csrf_param = function(){
return $('meta[name=csrf-param]').attr('content');
};
compv.tools.csrf_token = function(){
return $('meta[name=csrf-token]').attr('content');
};
这是我的美元
鉴于我在上述函数中获得了适当的csrf元数据,那么如何将其传递给.destroy
我尝试添加compv.tools.csrf_令牌,但得到的错误是没有定义compv。当我使用compv.tools.csrf_令牌时也发生了同样的事情
想法?看看rails附带的public/javascripts/rails.js中的handleMethod,它们都会向您展示rails是如何包含令牌的
如果您想使用自己的自定义销毁调用,那么您需要自己完成这项工作。将csrf函数的结果放入一个对象中,并在数据属性中传递该对象。至少这在过去对我是有效的
var data = {};
data[compv.tools.csrf_param()] = compv.tools.csrf_token();
$.destroy({
url: element.attr('data-destroy-url'),
success: mapping.success,
data: data
});
我不一定要使用我自己的自定义销毁。我甚至尝试过使用Rails的delete-helper方法,但它仍然给了我同样的问题!你的意思是你得到了一个错误,compv.tools不是一个对象吗?也许可以添加工具:{}到您的定义中?在其中传递变量。例如,如果我的变量是csrf_data,它将是$.destroy{url:element.attr'data-destroy-url',success:mapping.succes,data:csrf_data};对吗?事实上,我试过Rails的JS delete助手,但它不起作用。所以我不认为CSRF是在循环中抛出它。是的,如果这最终是调用jQuery的$.ajax方法,那么应该可以工作。如果您遇到的问题是关于未定义compv的错误,那么是的,CSRF令牌可能与此无关=
var data = {};
data[compv.tools.csrf_param()] = compv.tools.csrf_token();
$.destroy({
url: element.attr('data-destroy-url'),
success: mapping.success,
data: data
});