Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Rails3和Javascript中将csrf令牌添加到$.destroy中_Javascript_Jquery_Ruby On Rails_Ruby On Rails 3_Csrf - Fatal编程技术网

如何在Rails3和Javascript中将csrf令牌添加到$.destroy中

如何在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() { }

这与另一个问题有关,我认为这是问题的核心,但不确定如何解决

显然,我的$.destroy没有被传递必要的CSRF令牌

但我不知道如何将其包括在内

这是我的JS:

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
    });