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?

Author: php_nub_qq, 2013-12-17

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.

É assim que o jQuery funciona. Se não lhe disseres o que fazer com o resultado, ele usa o Content-Type para detectar o que fazer com ele.
 106
Author: Rocket Hazmat, 2017-01-28 14:38:39

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>
 7
Author: Among Amrul, 2014-07-21 06:06:12

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);
    });
 0
Author: Alex Vera, 2016-03-04 21:22:53