在触发AJAX事件之前,操纵DOM - CSRF错误

时间:2014-08-01 21:10:12

标签: javascript jquery ajax django csrf

我正在使用Django,尝试进行链接的AJAX调用 - 也就是说,一个调用,当返回时,会启动更多的AJAX调用。我一直在处理Django文档提供的处理CSRF令牌和AJAX的各种方法,但无济于事。

我有工作代码,允许这个链式AJAX调用成功通过:

frm.submit(function(e){
    $.ajax({
        type: frm.attr('method'),
        url: frm.attr('action'),
        data: frm.serialize(),
        headers: {'X-CSRFToken':csrftoken},
        success: function(data, status){
            $('#queue_div').append("<div class='container'>"+data['group_name']+"- "+data['client']+"<div id='queue"+counter+"'></div></div>");

            var div_id = 'queue'+counter;
            data['div_id'] = div_id;

            var token = $.cookie('csrftoken');
            data['csrf'] = token;

            $('#'+div_id).html(data['status']);

            callbackAJAX(data);
            } //end success function
    }); //end ajax function
    e.preventDefault();

但是当你通过使用&#34; beforeSend&#34;来延迟表格事件立即触发AJAX事件时(如下所示):

        var data = {'group_name':'name', 'client':'MrClient'}
        var counter = 0
        frm.submit(function(e){
        $.ajax({
            type: frm.attr('method'),
            url: frm.attr('action'),
            data: frm.serialize(),
            headers: {'X-CSRFToken':csrftoken}
            beforeSend:function(e){
               $('#foo').append('<div class='container'>"+data['group_name']+"- "+data['client']+"<div id='queue"+counter+"'></div></div>');
             } .....

或在$ .ajax调用之前添加一个事件(如下所示):

        frm.submit(function(e){
           $('#foo').append('<div class='container'>"+data['group_name']+"- "+data['client']+"<div id='queue"+counter+"'></div></div>');          
           $.ajax({
            type: frm.attr('method')....

您收到CSRF错误。

我成功地完成了非常简单的功能,如下所示:

        var counter = 0;
        frm.submit(function(e){         
           $.ajax({
            type: frm.attr('method'),
            sendBefore: function(e){
              counter++;
        }

但是那就是它。任何更复杂的东西都会被拒绝。我完全混淆了如何对实际发生的事情或Django可接受的事情做出正面或反面。 &安培;它的CSRF保护。

1 个答案:

答案 0 :(得分:0)

您尝试追加的HTML无效。我相信表单提交无效的原因。首先,您尝试将ID为foo的元素插入到具有相同ID(foo)的元素中。哪个是无效的HTML,因为ID不应该在页面内重复。

第二个主要问题是您要追加<div id=foo></div> <div id="foo"></div>