Хорошо, поэтому я всегда старался избегать использования большинства свойств протокола 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); });