Alguém pode explicar de uma maneira fácil como fazer o jQuery enviar JSON real em vez de uma string de consulta?
$.ajax({
url : url,
dataType : 'json', // I was pretty sure this would do the trick
data : data,
type : 'POST',
complete : callback // etc
});
De fato, isso converterá seu JSON cuidadosamente preparado em uma string de consulta. Uma das coisas irritantes é que qualquer um array: []
no seu objeto será convertido array[]: []
, provavelmente por causa das limitações da picada da consulta.
javascript
jquery
json
query-string
Redsandro
fonte
fonte
dataType
não tem influência sobre como os dados são enviados. Apenas especifica que tipo de dados você espera que retorne pela chamada. Se você deseja indicar ao servidor qual é o tipo de dados que você está especificando nadata
propriedade, você precisa configurá-lacontentType
semelhante acontentType: "application/json"
Respostas:
Você precisa usar
JSON.stringify
para serializar seu objeto primeiro para JSON e, em seguida, especificar ocontentType
para que seu servidor entenda que é JSON. Isso deve fazer o truque:Observe que o
JSON
objeto está disponível nativamente em navegadores que suportam JavaScript 1.7 / ECMAScript 5 ou posterior. Se você precisar de suporte legado, poderá usar o json2 .fonte
contentType: 'application/json'
.POST data will always be transmitted to the server using UTF-8 charset, per the W3C XMLHTTPRequest standard
$_POST
no php você só pode verapplication/x-www-form-urlencoded
, se você quiser ler json dados que você deve fazerfile_get_contents("php://input")
e, talvez, em seguida, umjson_decode()
Não, a
dataType
opção é para analisar os dados recebidos.Para postar JSON, você precisará stringify-lo sozinho via
JSON.stringify
e definir aprocessData
opção defalse
.Observe que nem todos os navegadores suportam o
JSON
objeto e, embora o jQuery o tenha.parseJSON
, ele não possui um stringificador incluído; você precisará de outra biblioteca de polyfill.fonte
processData
comofalse
não é necessário, poisJSON.stringify
já retorna uma sequência.encodeURIComponent
editado, não seria?Embora eu conheça muitas arquiteturas, como o ASP.NET MVC, têm funcionalidade incorporada para lidar com JSON.stringify como o contentType, minha situação é um pouco diferente; talvez isso possa ajudar alguém no futuro. Eu sei que teria me poupado horas!
Como minhas solicitações http estão sendo tratadas por uma API CGI da IBM (ambiente AS400) em um subdomínio diferente, essas solicitações são de origem cruzada, daí o jsonp. Na verdade, eu envio meu ajax via objeto (s) javascript. Aqui está um exemplo do meu ajax POST:
fonte
Se você estiver enviando isso de volta para o asp.net e precisar dos dados em request.form [], será necessário definir o tipo de conteúdo como "application / x-www-form-urlencoded; charset = utf-8"
Postagem original aqui
Em segundo lugar, livre-se do tipo de dados, se você não espera um retorno, o POST aguardará cerca de 4 minutos antes de falhar. Veja aqui
fonte