为什么以下javascript代码似乎在未调用function handleResponse()
的情况下运行?以下代码使用Google Books API。
<html>
<head>
<title>Google Books API Example</title>
</head>
<body>
<div id="content"></div>
<script>
function handleResponse(response) {
var item = response.items[0];
document.getElementById("content").innerHTML = item.volumeInfo.title + "<br>" + item.volumeInfo.authors[0];
}
</script>
<script src="https://www.googleapis.com/books/v1/volumes?q=rosie+project&callback=handleResponse"></script>
</body>
</html>
最佳答案
handleResponse()是一个jsonp回调。这主要是网页中的一种通信形式,是浏览器的同源策略的一种解决方法。
许多服务使用这种通信形式,例如推特。
这里的模式是您在url中传递某些内容(通常是称为callback
的参数),该内容实际上是您网页上方法的名称(在本例中为handleResponse)。该服务(具有数据)将形成javascript,以使handleResponse得到执行(作为带有参数的普通js函数)。参数可以是例如服务返回的一些数据。对于Twitter,这可能是时间轴供稿;在您的情况下,您可以搜索书籍。
本质上,您是在脚本标签中调用该网址...,并且执行javascript会产生以下效果:
handleResponse(some_data);