Заголовок заголовка содержимого HTTP и JSON

Хорошо, поэтому я всегда старался избегать использования большинства свойств протокола HTTP и как бы вы ни называли их ради страха перед неизвестным. Однако я сказал себе, что сегодня собираюсь столкнуться с боязнью и намеренно начать использовать заголовки. То, что я пытался достичь здесь, – это отправить данные json в браузер и сразу же использовать их. Например, если у меня есть функция обработчика ajax в состоянии готовности 4, которая выглядит так

 function ajaxHandler(response){ alert(response.text); } 

и я установил заголовок содержимого в моем php

 header('Content-Type: application/json'); echo json_encode(array('text' => 'omrele')); 

Мой вопрос: почему я не могу напрямую получить доступ к свойству из функции обработчика, когда браузеру ясно сказано, что входящие данные являются application/json ?

Заголовок Content-Type используется только как информация для вашего приложения. Браузеру все равно, что это такое. Браузер просто возвращает вам данные из вызова AJAX. Если вы хотите разобрать его как JSON, вам нужно сделать это самостоятельно.

Заголовок там, так что ваше приложение может обнаружить, какие данные были возвращены и как он должен справиться с этим. Вам нужно посмотреть на заголовок, и если это application/json проанализируйте его как JSON.

На самом деле это работает как jQuery. Если вы не скажете, что делать с результатом, он использует Content-Type для определения того, что с ним делать.

Content-Type: application/json – это только заголовок содержимого, заголовок содержимого – это просто информация о типе возвращаемых данных, ex :: JSON, image (png, jpg и т. Д.), Html. Имейте в виду, что JSON в javascript – это массив или объект. если вы хотите просмотреть все данные, используйте console.log вместо предупреждения

 alert(response.text);//will alert "[object Object]" string console.log(response.text);//will logging all data object 

если вы хотите предупредить оригинальный JSON как строку, чем добавить одиночные кавычки ('):

 echo "'" . json_encode(array('text' => 'omrele')) . "'"; //alert(response.text) will alert {"text":"omrele"} 

Не используйте двойные кавычки, это запутает javascript, потому что JSON использует двойную кавычку для каждого значения и ключа:

 echo '<script>var returndata='; echo '"' . json_encode(array('text' => 'omrele')) . '"'; echo ';</script>'; //it will return wrong javascript code: <script>var returndata="{"text":"omrele"}";</script> 

Следующий код поможет мне вернуть объект json для js в FronEnd

Мой шаблон кода template_file.json

 { "name": "{{name}}" } 

код под управлением 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') 

Код JQuery для FrontEnd

  $.ajax({ url:'{% url 'download_json-url' %}' }).done(function(data){ console.log('json ',data); console.log('Name',data.name); alert('hello '+data.name); });