为什么以下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);

07-26 02:35