加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

jQuery中借助deferred来请求及判断AJAX加载的实例讲解

发布时间:2020-12-15 23:26:54 所属栏目:百科 来源:网络整理
导读:ajax请求异步队列加载 我们在开发程序的时候通常会碰到使用ajax加载数据显示到列表的情况。ajax默认使用异步加载(async:true)。为什么不使用同步呢,因为ajax同步加载会UI渲染线程阻塞的问题。通常表现为在加载大量数据时由于加载时间过长导致页面不能点击

ajax请求异步队列加载

我们在开发程序的时候通常会碰到使用ajax加载数据显示到列表的情况。ajax默认使用异步加载(async:true)。为什么不使用同步呢,因为ajax同步加载会UI渲染线程阻塞的问题。通常表现为在加载大量数据时由于加载时间过长导致页面不能点击、gif动画卡死以及浏览器崩溃等问题。所以,一般情况下,尽量使用ajax异步加载。 可是,我们有些时候的需求要求ajax同步加载,一个加载完再加载下一个,即所谓的队列。前面我们有说过,同步加载会引起UI渲染阻塞问题。那么我们要怎么实现顺序加载而不引起该问题呢? 示例代码一:

PHP后台代码:

当然,jquery也提供了我们deferred对象来解决回调函数的问题。 示例代码二:

这里首先创建一个deffered对象,在ajax的success函数中将ajax返回的数据保存在deffered对象中,然后返回deffered对象。这样就保证了在下一次ajax请求的时候这个ajax已经请求完成。deferred对象的好处包括它允许你给一个事件自由添加多个回调函数。或者给多个事件统一指定回调函数。

用jquery的deferred对象实现判断页面中所有图片加载完成

如果我们加载的是图片,对于图片是否加载完成,我们平时可以用监听图片load 方法来进行。今天主要介绍用jquery的deferred对象来进行判断。 关于jquery的deferred对象,是jquery的重点和难点。对于执行较长时间的函数,我们通常用deferred对象。 关于deferred对象,我在这里稍微介绍一下$.when().then()

$.when(
$.ajax( "/main.php" ),$.ajax( "/modules.php" ),$.ajax( “/lists.php” )
).then( successFunc,failureFunc );

可以同时调用多个ajax,然后通过then来返回成功或者失败。

或者

我们回到正题来,用jquery的deferred对象实现判断页面中所有图片加载完成

$imgs.each(function() { //imgs循环所有图片
var dfd = $.Deferred();// 新建一个deferred对象

$(this).load(dfd.resolve());// 图片加载完成之后,改变deferred对象的执行状态
defereds.push(dfd);//push到数组中
});
$.when.apply(null,defereds).done(function() {
console.log('load compeleted');
});

因为 $.when 支持的参数是 $.when(dfd1,dfd2,dfd3,...),所以我们这里使用了 apply 来接受数组参数。

上面提到了apply(),又引申到了 在JS中,call()方法和apply()方法

我在这里稍微介绍一下apply()

假如我们有prints函数:

或者我们可以这么写:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读