Http Content-Type Header и JSON
хорошо, поэтому я всегда старался избегать использования большинства свойств протокола HTTP или как бы вы ни называли их ради страха перед неизвестным. Однако я сказал себе, что сегодня я столкнусь со страхом и начну целенаправленно использовать заголовки. То, что я пытался достичь здесь, это отправить json
данные в браузер и использовать его сразу. Например, если у меня есть функция обработчика ajax в состоянии готовности 4, которая выглядит так
function ajaxHandler(response){
alert(response.text);
}
и я поставил заголовок content-type в моем php
header('Content-Type: application/json');
echo json_encode(array('text' => 'omrele'));
мой вопрос: почему я не могу напрямую получить доступ к свойству из функции обработчика, когда браузеру ясно сказано, что входящие данные application/json
?
3 ответа:
The
Content-Type
заголовок просто используется в качестве информации для вашего приложения. Браузеру все равно, что это такое. Браузер просто возвращает вам данные из вызова AJAX. Если вы хотите разобрать его как JSON, вам нужно сделать это самостоятельно.заголовок есть, так что ваше приложение может определить, какие данные были возвращены и как он должен обрабатывать его. Вам нужно посмотреть на заголовок, и если это
application/json
затем разобрать его как JSON.Это на самом деле, как jQuery работает. Если ты не скажешь это что делать с результатом, он использует
Content-Type
чтобы определить, что с ним делать.
Content-Type: application/json
это просто заголовок контента, заголовок контента-это просто информация о типе возвращаемых данных, например::JSON,image(png,jpg и т. д..),формат HTML. Имейте в виду, что JSON в javascript-это массив или объект. если вы хотите увидеть все данные, используйте консоль.журнал вместо предупреждения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 в интерфейсе
мой код шаблона template_file.json
{ "name": "{{name}}" }
python backed code
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 код для интерфейса
$.ajax({ url:'{% url 'download_json-url' %}' }).done(function(data){ console.log('json ',data); console.log('Name',data.name); alert('hello '+data.name); });