如何加载JSON basic

时间:2016-02-09 20:25:52

标签: javascript json

我发布了这个问题,以了解为什么这适用于Gravatar,而不是在典型的生产环境中。答案很简单但是我忽略了一些因为我不熟悉JSON并认为问题是我对它的理解。这个论坛绝对无助于理解Gravatar的后端只是在使用回调时使用服务器端脚本来输出Javascript,而在只访问JSON的URL时使用普通JSON。因此使这个脚本工作,因为它是输出脚本。

虽然问题的第一部分得到回应并且有帮助,但后来发现Gravatar如何实现这一点的部分完全被忽略了。因为只有一半的问题被评论过,所以我想删除这个帖子。感谢。

我一直在使用一些JSON项目,并且我一次又一次地继续遇到错误。

  

Uncaught SyntaxError:意外的令牌:

index.html如下

<!doctype html>
<html>
  <head>
    <title>JSON</title>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8"/>
    <meta http-equiv="content-language" content="es"/>
    <script type="application/javascript" async="true" defer="true" src="script.js"></script>
    <script type="application/javascript" async="true" defer="true" src="flag.json?callback=pFlag"></script>
  </head>
  <body>
  </body>
</html>

的script.js

function pFlag(data){
  console.log(data);
}

flag.json

{"flag":{"color":"green"}}

我有另一个使用相同原理的项目,不会产生此错误。

http://lib.richardkentgates.com/gravacon/

是什么给出了?

2 个答案:

答案 0 :(得分:4)

永远不要那样工作。您将flag.json作为外部脚本加载,这意味着该文件必须包含有效的JS代码。你拥有的不是实际代码,它只是一个JS值定义。外部脚本必须基本上是<script>标记块的内容,没有脚本标记。 e.g

var foo = {"flag":{"color":"green"}};

会起作用。

鉴于您网址中的callback商家,您可能会尝试执行JSONP类型的请求,这意味着flag.json实际上应该包含此内容:

pFlag({"flag":{"color":"green"}})

答案 1 :(得分:1)

问题出在这一行:

<script type="application/javascript" async="true" defer="true" src="flag.json?callback=pFlag"></script>

JSON是based on a subset of JavaScript,但实际上并不是JavaScript。您不能将.json文件称为脚本(即使用<script>标记)。相反,您应该使用AJAX加载它。