Preciso enviar um JSON (que posso sequenciar) para o servidor e recuperar o JSON resultante no lado do usuário, sem usar JQuery.
Se devo usar um GET, como passo o JSON como parâmetro? Existe o risco de demorar muito?
Se eu devo usar um POST, como faço para definir o equivalente a uma onload
função em GET?
Ou devo usar um método diferente?
OBSERVAÇÃO
Esta questão não é sobre o envio de um AJAX simples. Não deve ser fechado como duplicado.
javascript
json
post
get
xmlhttprequest
Jérôme Verstrynge
fonte
fonte
XMLHttpRequest
. Apesar do nome, você pode usá-lo para dados JSON (e é assim que o jQuery faz em segundo plano).sending
uma solicitação ajax, que é uma coisa bastante geral. Este está pedindosending
mas ereceiving JSON
em JavaScript puro. Além disso, para devolver este JSON, você tem que saber como resolver esta parte do problema noserver-side
que é outra coisa não mencionada na questão referenciada.onreadystatechange
é o que você usa para emularonload
, conforme mostrado pela resposta aceita abaixo. Para analisar, você apenas usaJSON.parse()
(novamente, conforme mostrado na resposta), mas eu estava assumindo que você já sabia disso, pois mencionou a stringificação na pergunta. Tentei ajudá-lo apontando-lhe não 1, mas 2 questões que abrangem esses pontos. Obviamente, há alguma diferença - raramente 2 questões são exatamente idênticas - mas é trivial se você já sabe como stringificar e analisar JSON. Dito isso, uma vez que você e @ hex494D49 discordam, estou nomeando isso para reabertura.Respostas:
Envio e recebimento de dados no formato JSON usando o método POST
Envio e recebimento de dados no formato JSON usando o método GET
Tratamento de dados em formato JSON no lado do servidor usando PHP
O limite de comprimento de uma solicitação HTTP Get depende do servidor e do cliente (navegador) usados, de 2kB a 8kB. O servidor deve retornar o status 414 (Request-URI Too Long) se um URI for maior do que o servidor pode suportar.
Observação Alguém disse que eu poderia usar nomes de estado em vez de valores de estado; em outras palavras, eu poderia usar em
xhr.readyState === xhr.DONE
vez dexhr.readyState === 4
O problema é que o Internet Explorer usa nomes de estado diferentes, então é melhor usar valores de estado.fonte
xhr.status === 200
.XHR failed loading: POST
Usando novo api fetch :
fonte
JSON.stringify
duas vezes.