Eu sempre tentei evitar o uso da maioria das propriedades do protocolo HTTP por medo do desconhecido.
No entanto, eu disse a mim mesmo que hoje vou enfrentar o medo e começar a usar os cabeçalhos de propósito. Eu tenho tentado enviar json
dados para o navegador e usá-los imediatamente. Por exemplo, se eu tiver uma função de manipulador Ajax no estado pronto 4, com a seguinte aparência:
function ajaxHandler(response){
alert(response.text);
}
E eu configurei o cabeçalho do tipo de conteúdo no meu código PHP:
header('Content-Type: application/json');
echo json_encode(array('text' => 'omrele'));
Por que não consigo acessar diretamente a propriedade a partir da função manipuladora, quando o navegador é informado claramente de que os dados são recebidos application/json
?
javascript
php
json
http
php_nub_qq
fonte
fonte
text
como uma variável javascript no manipulador e não como resposta? Isso seria uma funcionalidade muito estranha. O json_encode também cria 1 objeto da sua matriz PHP. Portanto, quando você coloca isso em javascript, ele precisa ser atribuído a uma variável.JSON.parse()
. Você pode executar alguma ação diferente ou forçar um erro se o contentType errado aparecer.response.text
ainda é uma sequência.Respostas:
O
Content-Type
cabeçalho é usado apenas como informação para o seu aplicativo. O navegador não se importa com o que é. O navegador apenas retorna os dados da chamada AJAX. Se você quiser analisá-lo como JSON, precisará fazer isso por conta própria.O cabeçalho está lá para que seu aplicativo possa detectar quais dados foram retornados e como eles devem ser tratados. Você precisa olhar para o cabeçalho e, se for,
application/json
analisá-lo como JSON.É assim que o jQuery funciona. Se você não informar o que fazer com o resultado, ele será usado
Content-Type
para detectar o que fazer com o resultado.fonte
header('Content-Type: application/json');
e forçar o download atéContent-Disposition: attachment; filename=myfile.json
então, você terminará com amyfile.json.html
. Usando este cabeçalho json, você receberámyfile.json
..html
ao arquivo, porque é o que ele usa como padrão.Content-Type: application/json
é apenas o cabeçalho do conteúdo. O cabeçalho do conteúdo é apenas informações sobre o tipo de dados retornados, ex: JSON, imagem (png, jpg, etc.), html.Lembre-se de que JSON em JavaScript é uma matriz ou objeto. Se você deseja ver todos os dados, use console.log em vez de alerta:
Se você deseja alertar o conteúdo JSON original como uma sequência, adicione aspas simples ('):
Não use aspas duplas. Isso confundirá o JavaScript, porque o JSON usa aspas duplas em cada valor e chave:
fonte
echo "'" . json_encode(array('text' => 'it\'s wrong')) . "'";
irá produzir esta saída quebrado:'{"text":"it's wrong"}'
. Utilize este em vez disso:json_encode(json_encode(array('text' => 'it\'s good')))
. O resultado será escapado corretamente:"{\"text\":\"it's wrong\"}"
O código abaixo me ajuda a retornar um objeto JSON para JavaScript no front-end
O código do meu modelo
template_file.json
Código suportado por Python
Arquivo url.py
Código jQuery para o front end
fonte