headers - $.post() no envía datos como json sino como x-www-form-urlencoded en su lugar
jquery post headers (4)
Porque $.post() es para enviar solicitudes similares a formularios. http://api.jquery.com/jQuery.ajax/ es para enviar lo que quieras. Consulte contentType
en la página $.ajax
para obtener más información.
Citar:
Cuando envíe datos al servidor, use este tipo de contenido. El valor predeterminado es "application / x-www-form-urlencoded", que está bien para la mayoría de los casos. Si transfiere explícitamente un tipo de contenido a $ .ajax (), siempre se enviará al servidor (incluso si no se envía ningún dato). Los datos siempre se transmitirán al servidor utilizando el juego de caracteres UTF-8; debe decodificar esto apropiadamente en el lado del servidor.
Este es realmente extraño. Tengo varios $.post()
en el código, pero hay uno que no sabe por qué envía los parámetros json como x-www-form-urlencoded
en x-www-form-urlencoded
lugar y, por lo tanto, no funciona.
Aquí está el código:
$.post("/Route/SaveTransportProperties", { properties: JSON.stringify(propArray), currTravelBox: JSON.stringify(travelBoxObj), accessToken: getAccessToken()}, function(data)
{
//DO STUFF
});
El XHR se ve así en Firefox:
¿Alguna idea de por qué está sucediendo esto? También implementé el tipo como ''json'' pero tampoco funciona.
Si desea enviar los datos como json, utilice la función $ .ajax
Puede especificar type post y dataType json.
$.ajax({
url: "mydomain.com/url",
type: "POST",
dataType: "xml/html/script/json", // expected format for response
contentType: "application/json", // send as JSON
data: $.param( $("Element or Expression") ),
complete: function() {
//called when complete
},
success: function() {
//called when successful
},
error: function() {
//called when there is an error
},
});
Tomado de la documentación de ajax
http://api.jquery.com/jQuery.ajax/
contentTypeString
Default: ''application/x-www-form-urlencoded; charset=UTF-8''
También puede forzar que sus datos sean un json en la función de éxito: data = JSON.parse(data);
esto también me funciona
$.ajax({
url: "mydomain.com/url",
type: "POST",
dataType: "xml/html/script/json", // expected format for response
contentType: "application/json", // send as JSON
data: JSON.stringify(data),
complete: function() {
//called when complete
},
success: function() {
//called when successful
},
error: function() {
//called when there is an error
},
});