samedi 5 avril 2014

erreur 400 avec ajax jquery - Stack Overflow


I would like to get a second set of eye on this code.


formPaymentData is an JSON string of objects extracted from the form. I then went on to form a partial list params from formPaymentData, called _newData. I used _newData for my AJAX request.


the csrfmiddlewaretoken is a Django specific term, and I had to include it for the AJAX request. Without it, it produced a 403 error.


All I got was 400 error so I have no clue where to debug...


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);
}
});



If your server is expecting JSON, you need to set contentType: 'application/json' in your $.ajax call; otherwise JQuery will send application/x-www-form-urlencoded which isn't what the server is expecting. Additionally, you need to call JSON.stringify on your data so jQuery will send it as is rather than trying to encode it as application/x-www-form-urlencoded



I would like to get a second set of eye on this code.


formPaymentData is an JSON string of objects extracted from the form. I then went on to form a partial list params from formPaymentData, called _newData. I used _newData for my AJAX request.


the csrfmiddlewaretoken is a Django specific term, and I had to include it for the AJAX request. Without it, it produced a 403 error.


All I got was 400 error so I have no clue where to debug...


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);
}
});


If your server is expecting JSON, you need to set contentType: 'application/json' in your $.ajax call; otherwise JQuery will send application/x-www-form-urlencoded which isn't what the server is expecting. Additionally, you need to call JSON.stringify on your data so jQuery will send it as is rather than trying to encode it as application/x-www-form-urlencoded


0 commentaires:

Enregistrer un commentaire