Cabeçalho do tipo de conteúdo HTTP e JSON
Ok então eu sempre tentei evitar usar a maioria das propriedades do protocolo HTTP ou como você pode, por favor, chamá-los para o bem do medo do desconhecido. No entanto, eu disse a mim mesmo que vou enfrentar o medo hoje e começar a usar os cabeçalhos propositadamente. O que eu tenho tentado alcançar aqui é enviar dados json
para o navegador e usá-lo imediatamente. Por exemplo, se eu tiver uma função de handler ajax em ready state 4 que se parece assim
function ajaxHandler(response){
alert(response.text);
}
e eu ajustei o cabeçalho do tipo de conteúdo no meu php
header('Content-Type: application/json');
echo json_encode(array('text' => 'omrele'));
a minha pergunta é: porque não posso aceder directamente à propriedade a partir da função handler, quando o navegador é claramente informado de que os dados recebidos são application/json
?
3 answers
O cabeçalho Content-Type
é apenas usado como informação para a sua aplicação. O navegador não se importa com o que é. O navegador apenas devolve os dados da chamada AJAX. Se queres considerá-lo como JSON, tens de fazer isso sozinho.
O cabeçalho está lá para que o seu aplicativo possa detectar quais dados foram devolvidos e como ele deve lidar com isso. Você precisa olhar para o cabeçalho, e se for application/json
então analisá-lo como JSON.
Content-Type
para detectar o que fazer com ele.
Content-Type: application/json
é apenas cabeçalho de conteúdo, o cabeçalho de conteúdo é apenas informação sobre o tipo de dados retornados, ex::JSON,Imagem(png,jpg,etc..),galeria.
Tenha em mente que JSON em javascript é um array ou objeto.
se você quiser ver todos os dados, use o console.registar em vez de alertar
alert(response.text);//will alert "[object Object]" string
console.log(response.text);//will logging all data object
Se quiser alertar o JSON original como texto, em vez de adicionar aspas simples ('):
echo "'" . json_encode(array('text' => 'omrele')) . "'";
//alert(response.text) will alert {"text":"omrele"}
Não use aspas duplas, irá confundir javascript, porque JSON usa aspas duplas em cada valor e chave:
echo '<script>var returndata=';
echo '"' . json_encode(array('text' => 'omrele')) . '"';
echo ';</script>';
//it will return wrong javascript code:
<script>var returndata="{"text":"omrele"}";</script>
O código abaixo ajuda-me a devolver um objecto json para o js no FronEnd
O meu código-modelo template_file.json
{
"name": "{{name}}"
}
Código suportado por Python
def download_json(request):
print("Downloading json")
#response render a template as json object
return HttpResponse(render_to_response("template_file.json",dict(name="Alex Vera")),content_type="application/json")
Url.py
url(r'^download_as_json/$',views.download_json,name='download_json-url')
Código Jquery para Interface
$.ajax({
url:'{% url 'download_json-url' %}'
}).done(function(data){
console.log('json ',data);
console.log('Name',data.name);
alert('hello '+data.name);
});