type headers ejemplos data post jquery jquery-post

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