我在网站上有自定义搜索,我想使用自定义搜索热门查询选项显示最热门的搜索。首先,Google在此过程中提供的代码是错误的 - 我一直收到不好的请求。 This SO post帮助我重建了正确的网址,但现在我收到了语法错误。
当我运行测试时,我从控制台中获取了来自JSON信息的Uncaught SyntaxError: Unexpected token :
。
这是我的HTML:
<div id="queries"></div>
<script src="https://cse.google.com/query_renderer.js"></script>
<script src="https://www.google.com/cse/api/USERID/cse/CSEID/queries/js?view=overall&callback=(new+PopularQueryRenderer(document.getElementById('queries'))).render"></script>
抛出错误的冒号是在title
之后,但我无法弄清楚为什么会这样。
{
"title" : "MTBoS Search Engine",
"popularQueries" : [ ...rest of the results array... ]
}
最后,我尝试通过复制和粘贴调用URL来调用formatting checker的JSON响应,并返回一些HTML错误。这可能是查询渲染器脚本的问题吗?
感谢任何帮助。
答案 0 :(得分:0)
如果您查看Google上的示例(您应该可以在 Google自定义搜索/统计信息和日志页面底部看到它),您应该会看到而不是单引号,谷歌的例子使用编码的双引号:
<script src="https://www.google.com/cse/api/USERID/cse/CSEID/queries/js?view=overall&callback=(new+PopularQueryRenderer(document.getElementById(%22queries%22))).render"></script>
我不明白为什么单引号在那里不起作用,但是,我已经证实对我来说至少他们没有。如果我在那里放单引号,我会收到你看到的错误:
SyntaxError:意外的令牌&#39;:&#39;。解析错误。
如果我将百分比编码的引号放在那里,它会成功创建常用查询列表。
似乎是单引号是问题,而不是它们未编码用于URL。如果我用%27(编码单引号)替换%22,则会产生相同的“意外令牌”错误。
如果您希望避免使用百分比编码,则legal to use single quotes包围属性,因此您可以这样做:
<script src='https://www.google.com/cse/api/USERID/cse/CSEID/queries/js?view=overall&callback=(new+PopularQueryRenderer(document.getElementById("queries"))).render'></script>
根据HTML规范,双引号在单引号内是合法的,我已经确认这也适用于我的搜索页。