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); });