ajax jquery有400错误

时间:2014-04-03 04:16:25

标签: jquery ajax django

我想第二眼看看这段代码。

formPaymentData是从表单中提取的JSON对象字符串。然后我继续从formPaymentData形成一个名为_newData的部分列表参数。我使用_newData来表示我的AJAX请求。

csrfmiddlewaretoken是一个Django特定术语,我必须将它包含在AJAX请求中。没有它,它会产生403错误。

我得到的全部是400错误所以我不知道在哪里调试...

formPaymentData = $form.serializeArray();

console.log('before: -------------------------')
for (var i = 0; i < formPaymentData.length; i++) {
    console.log(formPaymentData[i].name + ': ' + formPaymentData[i].value);
}

var tempArray = [];
for (var i = 0; i < formPaymentData.length; i++) {
    if (formPaymentData[i].name == 'products' && formPaymentData[i].value != '') {
        tempArray.push(formPaymentData[i].value);
    }
}
productDataString = tempArray.join(',');
/*Construct JSON OBJECT */

reqParams = ['csrfmiddlewaretoken', 'order_number', 'shop_id'];
var _newData = []; // Extracted data
$.each(formPaymentData, function (index, data) {
    if ($.inArray(data.name, reqParams) !== -1 && data.name != 'products') {
        _newData.push(data);
    }
});

var dataProducts = {};
dataProducts.name = 'products';
dataProducts.value = productDataString;
_newData.push(dataProducts);

reqParams = ['height', 'width', 'length'];
$.each(formPaymentData, function (index, data) {
    if ($.inArray(data.name, reqParams) !== -1 && data.name != 'products') {
        _newData.push(data);
    }
});

JSON.stringify(_newData);
console.log('After stringify:');
console.log(_newData);
/*end Construct JSON OBJECT */

$.ajax({
    url: "/request_label",
    type: "POST",
    data: _newData,
    success: function (data) {
        console.log("Request complete.");
        console.log(data);
    },
    error: function (data) {
        console.log("failed");
        console.log(data);
    }
});

1 个答案:

答案 0 :(得分:0)

如果您的服务器需要JSON,则需要在contentType: 'application/json'电话中设置$.ajax;否则JQuery将发送application/x-www-form-urlencoded,这不是服务器所期望的。此外,您需要在JSON.stringify上致电data,以便jQuery按原样发送,而不是尝试将其编码为application/x-www-form-urlencoded