KiwenLau同学在他的个人博客使用了Fundebug的JavaScript错误监控插件,然后偶尔会收到jQuery is not defined这样的错误报警:

他的博客使用了Staticfile CDN提供的的jQuery:

<script src="https://cdn.staticfile.org/jquery/3.1.1/jquery.min.js"></script>

由出错的代码块可知,博客中的『返回顶部』的功能是使用了jQuery实现,如果jQuery出错,意味着该功能失效,那么读者就不得不手动滑动到博客顶部,这样用户体验是非常糟糕的。根据统计,3个月时间内,这个错误已经累计出现了399次,已经相当严重了。

而根据最新统计数据显示,jQuery依然是前端用得最多的JavaScript库,因此一旦jQuery出错,必定会影响很多功能,jQuery的重要性不言而喻。另一方面,不少Fundebug的用户都收到过"jQuery is not defined"的错误报警,许多前端开发者应该都遇到(也许只是你没有发现),我们通过这篇博客帮助大家解决问题。

出错原因1: 加载CDN的jQuery失败或者超时

当提供jQuery的CDN出问题导致jQuery加载失败,或者由于网络问题浏览器加载jQuery文件超时,会出现jQuery未定义的错误。

解决方案: 将jQuery文件挂载在自己的网站上作为备用,如果CDN加载jQuery失败,则使用自己网站存托管的jQuery。这样的话,大部分用户依然可以通过CDN加快访问速度,而一旦CDN出问题时也可以避免出错。

 <script src="https://cdn.staticfile.org/jquery/3.1.1/jquery.min.js"></script><script> window.jQuery || document.write('<script src="http://kiwenlau.com/js/jquery.min.js"><\/script>'))</script>

KiwenLau的博客读者绝大部分来自国内,然而分析错误的IP地址后,他发现高达26.1%出错用户的来自国外。根据幸存者偏差,我们不能认定国内用户出错概率更高,而应该认定国外用户出错概率更高。那么这就不难理解了,国外用户请求国内CDN时速度太慢,导致jQuery出错。

因此,他将jQuery挂载在http://kiwenlau.com/js/jquery.min.js作为备用,解决了问题。

出错原因2: 加载jQuery的顺序错误

依赖于jQuery的其它JavaScript脚本先于jQuery加载完成并执行。这时jQuery尚未加载,因此依赖于jQuery的代码调用jQuery的话就会出错。

解决方案: 将jQuery库放在依赖于jQuery的JavaScript脚本之前,并且将这些代码放入document.ready来确保DOM加载完毕。

<script type="text/javascript" src="path/to/jquery.min.js"></script>
<script type="text/javascript">$(document).ready(function() {//依赖于jQuery的代码});
</script>

参考链接

The State of Front-End Tooling 2016 - Results
幸存者偏差是什么意思?- 知乎

聊聊jQuery is not defined相关推荐

  1. 解决:Uncaught ReferenceError: jQuery is not defined

    在我写好后台代码准备在登陆页面登陆的时候发现的错误,但是我报错相关的js文件都正确导入了的 百度了后,参照如下贴子: https://www.aliyun.com/jiaocheng/984428.h ...

  2. vue中引入jquery报错问题

    vue-cli搭建的vue项目中使用到jquery插件,需要引入jquery, 在无任何配置的情况下,直接在组件中import引入,在mounted时候打印$ 会显示undefined报错问题, 感觉 ...

  3. bootsrap+jquery+组件项目引入文件的常见报错

    做一个项目的时候 ,控制台总是会出现各种bug,其实不用慌张,终结起来也就几种类型的错误,在开发中每次遇到错误都善于总结,下次在看到就会胸有成竹知道是什么情况了,以下是在开发过程中总结的一些错误以及错 ...

  4. Vue中正确使用jQuery的方法

    题主Vue小白,入门demo时想在其中使用jQuery(当然可能是不推荐的做法哈,毕竟俩儿的风格不一样,但万一你就需要呢 _^ ^_),结果遇到问题,最终倒腾解决. 编译报错:$ is undefin ...

  5. jQuery轮 播的封装

    今天来聊聊jQuery轮播的封装! 我自己封装了一个图片宽1200px,高400px的无缝滚动轮播图:话不多说看看代码吧! Js: /*** Created by Administrator on 2 ...

  6. [原]Java程序员的JavaScript学习笔记(7——jQuery基本机制)

    计划按如下顺序完成这篇笔记: 理念. 属性复制和继承. this/call/apply. 闭包/getter/setter. prototype. 面向对象模拟. jQuery基本机制. jQuery ...

  7. 菜鸟初学JQuery

    生活不菜,菜鸟不菜.大家好,我是互联网小菜鸟,又和大家见面了.近期,看了一下JQuery,感觉挺简单,然后和大家一起聊聊JQuery,顺便帮助那些菜鸟们JQuery入门.下面我们就开始. 首先我们先认 ...

  8. 引入文件报错的解决方法(bootstrap+jquery项目)

    这篇文章主要介绍了bootstrap+jquery项目引入文件的常见报错问题,下面给大家分享了一些错误及错误的解决方法,需要的朋友可以参考下 做一个项目的时候 ,控制台总是会出现各种bug,其实不用慌 ...

  9. Selenium Web 自动化 - 如何找到元素

    Selenium Web 自动化 - 如何找到元素 2016-07-29 1. 什么是元素? 元素:http://www.w3school.com.cn/html/html_elements.asp ...

最新文章

  1. 1045 Favorite Color Stripe(LIS解法)
  2. shell 中引用参数总结
  3. node爬取app数据_在电销行业中,运营商大数据究竟起着怎样的作用
  4. Struts2拦截器之FileUploadInterceptor
  5. 初级程序员需要接触好的架构代码
  6. delphi 提示class tparamlistbox not found_通达信主图K线变色波段提示指标公式
  7. js获取当前时区GMT
  8. json.js+ jquery 操作笔记
  9. 3种方式限制ip访问Oracle数据库
  10. (转)嵌入式按键驱动,支持短按、长按、双击(中断方式)
  11. 面向对象的程序设计方法
  12. 恩智浦智能车电机驱动程序_恩智浦智能车电机驱动-HIP4082+LR7843
  13. CS模式(客户端到服务器端)
  14. 互联网寒冬,那些不怕失业的程序员们,都有什么技能?
  15. PaddlePaddle飞桨论文复现营——3D Residual Networks for Action Recognition学习笔记
  16. (出海必备)Android三方登录之Google登录
  17. SpringCloud Alibaba Senta处理分布式事务
  18. 魔法女孩交到了好朋友(变量)
  19. gearman的安装
  20. 美国哪些公司实习生工资高?Facebook每月给5万5

热门文章

  1. java 单选按钮怎么重置_单选框-复选框重置的方法
  2. python输出图像plt_Matplotlib(pyplot)savefig输出空白图像
  3. java 复制mysql某张表_java实现mysql数据库从一张表插入数据到另一张表
  4. linux系统支持什么格式的软件吗,UOS系统支持什么样的软件包格式:其实Deb,Rpm,Tar.gz源码包都行...
  5. php修改学生信息代码_论导师和学生关于论文写作最大的信息不对称(一):从初稿到定稿到底要修改几遍?...
  6. 常州儿童计算机培训,常州推荐儿童编程培训班哪几家靠谱
  7. 自学c语言后的感受,一路走来,浅谈c语言的学习感想
  8. cad2016中选择全图字体怎么操作_给几十页PPT换字体,我同事居然花了半个小时?明明3秒就能搞定...
  9. esp分区创建 linux_Elementary OS - 号称最漂亮的 Linux 发行版
  10. R语言的特征选择(Feature Selection)包:Boruta和caret