我想第二眼看看这段代码。
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);
}
});
答案 0 :(得分:0)
如果您的服务器需要JSON,则需要在contentType: 'application/json'
电话中设置$.ajax
;否则JQuery将发送application/x-www-form-urlencoded
,这不是服务器所期望的。此外,您需要在JSON.stringify
上致电data
,以便jQuery按原样发送,而不是尝试将其编码为application/x-www-form-urlencoded