¿Alguien puede explicar de una manera fácil cómo hacer que jQuery envíe JSON real en lugar de una cadena de consulta?
$.ajax({
url : url,
dataType : 'json', // I was pretty sure this would do the trick
data : data,
type : 'POST',
complete : callback // etc
});
De hecho, esto convertirá su JSON cuidadosamente preparado en una cadena de consulta. Una de las cosas molestas es que cualquiera array: []
en su objeto se convertirá array[]: []
, probablemente debido a las limitaciones de la picadura de la consulta.
javascript
jquery
json
query-string
Redsandro
fuente
fuente
dataType
no tiene relación con cómo se envían los datos. Simplemente especifica cuál es el tipo de datos que espera que devuelva la llamada. Si desea indicar al servidor cuál es el tipo de datos que está especificando en ladata
propiedad que necesita para establecer unacontentType
propiedad similar acontentType: "application/json"
Respuestas:
Debe usarlo
JSON.stringify
para serializar primero su objeto en JSON y luego especificarlocontentType
para que su servidor comprenda que es JSON. Esto debería funcionar:Tenga en cuenta que el
JSON
objeto está disponible de forma nativa en navegadores que admiten JavaScript 1.7 / ECMAScript 5 o posterior. Si necesita soporte heredado, puede usar json2 .fuente
contentType: 'application/json'
.POST data will always be transmitted to the server using UTF-8 charset, per the W3C XMLHTTPRequest standard
$_POST
php solo puedes verapplication/x-www-form-urlencoded
, si quieres leer los datos de json debes hacerlofile_get_contents("php://input")
y quizás luego unjson_decode()
No, la
dataType
opción es analizar los datos recibidos.Para publicar JSON, tendrá que encadenarlo usted mismo a través de
JSON.stringify
y configurar laprocessData
opción enfalse
.Tenga en cuenta que no todos los navegadores son compatibles con el
JSON
objeto, y aunque jQuery sí lo tiene.parseJSON
, no tiene un stringifier incluido; Necesitarás otra biblioteca de polyfill.fuente
processData
afalse
no es necesaria, ya queJSON.stringify
ya se devuelve una cadena.encodeURIComponent
editado, ¿no?Si bien sé que muchas arquitecturas como ASP.NET MVC tienen una funcionalidad incorporada para manejar JSON.stringify como contentType, mi situación es un poco diferente, por lo que tal vez esto pueda ayudar a alguien en el futuro. ¡Sé que me habría ahorrado horas!
Dado que mis solicitudes http están siendo manejadas por una API CGI de IBM (entorno AS400) en un subdominio diferente, estas solicitudes son de origen cruzado, de ahí el jsonp. De hecho, envío mi ajax a través de objetos de JavaScript. Aquí hay un ejemplo de mi ajax POST:
fuente
Si envía esto de vuelta a asp.net y necesita los datos en request.form [], deberá configurar el tipo de contenido en "application / x-www-form-urlencoded; charset = utf-8"
Publicación original aquí
En segundo lugar, elimine el Datatype, si no espera una devolución, la POST esperará unos 4 minutos antes de fallar. Ver aquí
fuente