ajax $.post 一直報 Forbidden (CSRF token missing or incorrect.)


由於后台整合類視圖代碼,所以修改了寫法,完了之后用下面的寫法寫的post請求都報 403 error

$.post(
        "{% url 'test_record:select_node_page' ret.uut_id %}",
        {
            // uut_id: "{{ ret.uut_id }}",
            filter: JSON.stringify(filters),
        },
        function(data){
            var retData = JSON.parse(data);
            console.log(retData);   // DEBUG
            $(".chassis tbody").html("");
            if(retData.nodes.length){
                $(".chassis tbody").append(make_tr_html(retData.chassis, "1"));
                retData.nodes.forEach(function(item){
                    $(".chassis tbody").append(make_tr_html(item, "2"));
                });
            }else{
                $(".chassis tbody").append(make_tr_html(retData.chassis, "3"));
            }
            $("#uut_id").html(retData.uut_id);
            // finished
            $('.ajax_container').removeClass("loding");
            elem_resize();
        }
    );

但是后台都加了 @csrf_exempt 裝飾器,前台也沒有要加 csrf 防御的地方了,不知道為什么還是一直報 403 error,
最后在 stackoverflow 中找到了解決方法:

ajax 請求中添加

    beforeSend: function(xhr, settings) {
        xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
    },

最后沒有再報 403 的code:

    $.ajax({
        'type':'POST',
        'data':{
            filter: JSON.stringify(filters),
        },
        'url': "{% url 'test_record:select_node_page' ret.uut_id %}",
        beforeSend: function(xhr, settings) {
            xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
        },
        success: function(data){
            var retData = JSON.parse(data);
            console.log(retData);   // DEBUG
            $(".chassis tbody").html("");
            if(retData.nodes.length){
                $(".chassis tbody").append(make_tr_html(retData.chassis, "1"));
                retData.nodes.forEach(function(item){
                    $(".chassis tbody").append(make_tr_html(item, "2"));
                });
            }else{
                $(".chassis tbody").append(make_tr_html(retData.chassis, "3"));
            }
            $("#uut_id").html(retData.uut_id);
            // finished
            $('.ajax_container').removeClass("loding");
            elem_resize();
        },
        error: function(){

        }
    });


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM