HTTP内容types标题和JSON
好的,所以我一直试图避免使用大部分的HTTP协议的属性,或者为了害怕未知,你可能会怎么称呼它们。 不过,我对自己说,我今天要面对恐惧,开始故意使用头文件。 我一直在努力实现的是将json
数据发送到浏览器并立即使用。 例如,如果我有一个就绪状态4,看起来像这样的ajax处理函数
function ajaxHandler(response){ alert(response.text); }
我已经在我的PHP中设置了内容types的头
header('Content-Type: application/json'); echo json_encode(array('text' => 'omrele'));
我的问题是:为什么我不能直接访问处理函数的属性,当浏览器明确告诉传入的数据是application/json
?
Content-Type
头只是用作应用程序的信息。 浏览器不关心它是什么。 浏览器只是从AJAX调用中返回数据。 如果你想parsing为JSON,你需要自己做。
头在那里,所以你的应用程序可以检测到什么数据返回,以及如何处理它。 你需要看看头,如果它是application/json
然后parsing为JSON。
这实际上是如何工作的。 如果您不告诉它如何处理结果,它将使用Content-Type
来检测如何处理结果。
Content-Type: application/json
只是内容头,内容头只是返回数据types的信息,例如:JSON,image(png,jpg等),html。 请记住,JavaScript中的JSON是一个数组或对象。 如果要查看所有数据,请使用console.log而不是alert
alert(response.text);//will alert "[object Object]" string console.log(response.text);//will logging all data object
如果要将原始JSON提示为string,则需要添加单引号('):
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>
下面的代码帮助我在FronEnd中为js返回一个json对象
我的模板代码 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代码
$.ajax({ url:'{% url 'download_json-url' %}' }).done(function(data){ console.log('json ',data); console.log('Name',data.name); alert('hello '+data.name); });