回显json_encode和在ajax中返回之间的区别


Difference between echoing json_encode and returning it in ajax

我认为这可能是基本的,但我很好奇。为什么您必须解析ajax调用返回的json编码数据,而不是在主加载文档中由php响应的情况下?

编辑:基本上,问题是,如果我有一个名为data的对象,在这两种情况下都具有属性id,为什么我可以键入

data.id

当json对象在加载主文档时被回显时,是否返回值,但当从ajax调用返回而未解析时,是否抛出错误?

我认为你的意思是你做了这样的事情:

<script>
  var data = <? echo json_encode($data) ?>;
  alert(data.id);
</script>

如果是这种情况,浏览器就会知道返回的json是代码,因为它包含在脚本标记中。JSON是JavaScript的一个子集,所以您在这里真正要做的是生成JavaScript代码,然后浏览器对其进行解释。

另一方面,Ajax不同。当你用ajax加载一些东西时,它可能是文本、xml、csv、html、svg,或者几十种不同格式中的任何一种。JSON和我列出的所有其他格式一样,只是一种数据格式,所以你必须告诉javascript引擎它是什么。这就是为什么你必须解析它。它需要知道文本的格式,这样才能正确地解释它。

您不必,JSON编码的字符串仍然需要从Javascript中"解码"。这只是一种更快的方式,可以访问ajax调用返回字符串中的数组元素/属性。