如何使用补丁方法通过Ajax使用django tastypie创建多个对象?

如何使用补丁方法通过Ajax使用django tastypie创建多个对象?,ajax,django,tastypie,Ajax,Django,Tastypie,尝试使用Jquery及其失败警报Not connect使用django tastypie创建多个对象,如下面代码中所指定。但是,使用传递给ajax的相同数据(sent\u data)执行curl请求非常有效 sent_data = {"objects":[{"shopping_id":"#3Q^9%LF728N!9*840H(NEAH2L%J8$3H2J35(ZI@32MSA!S@RD%D3#PQG9^2#*J69S4&7IJX)POV$PYQ70817P2C!6OEPA%*$WR7",

尝试使用Jquery及其失败警报
Not connect
使用django tastypie创建多个对象,如下面代码中所指定。但是,使用传递给ajax的相同数据(
sent\u data
)执行curl请求非常有效

sent_data = {"objects":[{"shopping_id":"#3Q^9%LF728N!9*840H(NEAH2L%J8$3H2J35(ZI@32MSA!S@RD%D3#PQG9^2#*J69S4&7IJX)POV$PYQ70817P2C!6OEPA%*$WR7","quantity":"3","option":"/api/v1/option/2/","item":"/api/v1/item/1/","created_by":"/api/v1/user/-1/","modified_by":"/api/v1/user/-1/","toppings_and_extras":["/api/v1/topping/1/","/api/v1/topping/2/"]},{"shopping_id":"#3Q^9%LF728N!9*840H(NEAH2L%J8$3H2J35(ZI@32MSA!S@RD%D3#PQG9^2#*J69S4&7IJX)POV$PYQ70817P2C!6OEPA%*$WR7","quantity":"3","option":"/api/v1/option/2/","item":"/api/v1/item/1/","created_by":"/api/v1/user/-1/","modified_by":"/api/v1/user/-1/","toppings_and_extras":["/api/v1/topping/1/","/api/v1/topping/2/"]}]};

$.ajax({
        type:'POST',
        url:'http://localhost:8000/api/v1/order/',
        contentType: 'application/json',
        data:sent_data,
        headers:{'X-HTTP-Method-Override':'PATCH'},
        dataType:'json',
        processData:false,
        success: function(data){
            alert("POST request made");

        },
        error: function(jqXHR,exception){
            if (jqXHR.status === 0) {
                alert('Not connect.\n Verify Network.');
            } else if (jqXHR.status == 404) {
                alert('Requested page not found. [404]');
            } else if (jqXHR.status == 500) {
                alert('Internal Server Error [500].');
            } else if (exception === 'parsererror') {
                alert('Requested JSON parse failed.');
            } else if (exception === 'timeout') {
                alert('Time out error.');
            } else if (exception === 'abort') {
                alert('Ajax request aborted.');
            } else {
                alert('Uncaught Error.\n' + jqXHR.responseText);
            }
        }
    });

查看并计算,因为我试图进行文档中提到的批量操作,所以我不得不使用“补丁”方法,我通过提供一个X-HTTP-method-Override头实现了这一点,但都是徒劳的。我会错过什么?

在做了更多的研究之后,我发现问题在于我没有在表单中为“CSRFToken”设置标题,这一要点帮助我解决了这个问题。所以工作请求看起来是这样的

sent_data = JSON.stringify({"objects":[{"shopping_id":"#3Q^9%LF728N!9*840H(NEAH2L%J8$3H2J35(ZI@32MSA!S@RD%D3#PQG9^2#*J69S4&7IJX)POV$PYQ70817P2C!6OEPA%*$WR7","quantity":"3","option":"/api/v1/option/2/","item":"/api/v1/item/1/","created_by":"/api/v1/user/-1/","modified_by":"/api/v1/user/-1/","toppings_and_extras":["/api/v1/topping/1/","/api/v1/topping/2/"]},{"shopping_id":"#3Q^9%LF728N!9*840H(NEAH2L%J8$3H2J35(ZI@32MSA!S@RD%D3#PQG9^2#*J69S4&7IJX)POV$PYQ70817P2C!6OEPA%*$WR7","quantity":"3","option":"/api/v1/option/2/","item":"/api/v1/item/1/","created_by":"/api/v1/user/-1/","modified_by":"/api/v1/user/-1/","toppings_and_extras":["/api/v1/topping/1/","/api/v1/topping/2/"]}]});

$.ajax({
        url:'/api/v1/order/?format=json',
        accepts:'application/json',
        contentType: 'application/json',
        headers:{
            'X-HTTP-Method-Override':'PATCH'
        },
        method:'POST',
        data:sent_data,
        beforeSend:function(jqXHR,settings){
            jqXHR.setRequestHeader('X-CSRFToken',$("input[name=csrfmiddlewaretoken]").val())
        },
        dataType:'json',
        processData:false,
        success: function(data){
            alert("damn posted");

        },
        error: function(jqXHR,exception){
            if (jqXHR.status === 0) {
                alert('Not connect.\n Verify Network.');
            } else if (jqXHR.status == 404) {
                alert('Requested page not found. [404]');
            } else if (jqXHR.status == 500) {
                alert('Internal Server Error [500].');
            } else if (exception === 'parsererror') {
                alert('Requested JSON parse failed.');
            } else if (exception === 'timeout') {
                alert('Time out error.');
            } else if (exception === 'abort') {
                alert('Ajax request aborted.');
            } else {
                alert('Uncaught Error.\n' + jqXHR.responseText);
            }
        }
    });
还要注意,我传递了一个JSON.stringify()方法