如何更新.complete()以兼容jQuery 3(原适配jQuery 1.9)
解决jQuery 3中$.getJSON().complete()的兼容问题
看到你遇到的TypeError: undefined is not a function报错,就知道是jQuery 3的AJAX方法迭代导致的问题——jQuery 3彻底移除了旧的.complete()方法,而这个方法在jQuery 1.8之后就已经被标记为废弃了。咱们直接用.always()来替代它就行,作用完全一致,改动还最小!
具体修改步骤
把你原来的代码:
$.getJSON(url,function(data){ // 你的业务逻辑代码 }).complete(function(){ // 原来需要在请求完成后执行的代码 });
直接替换成:
$.getJSON(url,function(data){ // 你的业务逻辑代码 }).always(function(){ // 把原来complete里的代码原封不动挪到这里 });
为什么这个改动有效?
在jQuery从1.9到3.x的版本迭代中,AJAX模块做了标准化调整:
- 旧的
.success()、.error()、.complete()这三个方法被逐步废弃,最终在jQuery 3中被完全移除 - 官方推荐使用符合Promise规范的方法来替代:
.done():处理AJAX请求成功的回调.fail():处理AJAX请求失败的回调.always():无论请求成功或失败,都会执行的回调(完全等价于旧的.complete())
这样修改后,你的插件不仅能在jQuery 3环境下正常运行,还能向下兼容到jQuery 1.8及以上的版本,完美适配你的需求。
如果之后你想更贴合现代JavaScript的Promise写法,也可以用.then()来结合成功和失败回调,但.always()是最直接替换.complete()的方案,几乎不需要改动原有逻辑。
内容的提问来源于stack exchange,提问作者Sébastien Gicquel
相关产品推荐
相关产品推荐

