我发布了这个问题,以了解为什么这适用于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/
是什么给出了?
答案 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加载它。