如何通过JavaScript循环调用Blogger API获取全部博文?代码报错求助
解决Blogger API调用中"$ is not defined"的错误
你碰到的Uncaught ReferenceError: $ is not defined问题,核心原因是jQuery还没加载完成,你的代码就先执行了,或者jQuery加载失败导致$这个全局变量不存在。另外你的代码还有个小bug,我一起帮你修正。
问题分析
- 虽然你引入了jQuery的CDN,但浏览器加载脚本是异步的,可能你的
handleResponse函数执行时,jQuery还没加载完毕,所以找不到$。 - 循环里的
$('.post p').html(response.items[i].title)会把所有.post下的<p>标签内容都改成当前循环的标题,这不是你想要的效果——应该只给刚新增的那篇文章设置标题。
修正后的代码
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script> // 确保jQuery和DOM都加载完成后再执行代码 $(document).ready(function() { function handleResponse(response) { var post_number = Object.keys(response.items).length; for (var i = 0; i < post_number; i++) { // 创建当前文章的元素,直接设置标题后再追加 var $post = $('<div id="post' + (i+1) + '" class="post"><p>' + response.items[i].title + '</p></div>'); $('#content').append($post); } } }); </script> <script src="https://www.googleapis.com/blogger/v3/blogs/5039479718685240371/posts?callback=handleResponse&key=AIzaSyDxfWmXTRnO5yIp25NvuUEBWKSa_5mqjHA"></script>
关键调整说明
- 把
handleResponse函数放在$(document).ready()内部,保证只有当jQuery完全加载、DOM树准备好后,相关函数才会被定义和执行。 - 直接在创建元素时就填充标题内容,避免后续批量修改所有
.post元素,确保每篇文章的标题正确对应。 - 给循环变量
i加上var声明,避免污染全局变量。
如果还是遇到jQuery加载问题,可以换一个稳定的jQuery CDN链接,或者把jQuery下载到本地引入。
内容的提问来源于stack exchange,提问作者user8342070
相关产品推荐
相关产品推荐

