HTTP内容类型标题和JSON问题如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

好吧,我一直试图避免使用大部分HTTP协议的属性,或者为了害怕未知,可能会怎么称呼它们。然而,我对自己说,我今天要面对恐惧,并开始故意使用头文件。我一直在努力实现的是将json数据发送到浏览器并立即使用它。例如,如果我有就绪状态4,看起来像这样的ajax处理函数

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只是内容标题,内容标题只是关于返回数据类型的信息,例如:JSON,图像(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提示为字符串,则需要添加单引号('):

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>

扫码关注云+社区