`
lection.yu
  • 浏览: 77569 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【转】初识 jQuery Deferred

阅读更多
jQuery 1.5之前,Ajax请求可能有点麻烦。写一个简单get请求,你可能会写成:
01 $(function() {
02   $.get(
03     "content.txt",
04     function(resp) {
05       console.log("first code block");
06       console.log(resp);
07     }
08   );
09
10 });

但这种写法存在一个问题:如果你不定义一个函数来运行此代码,执行失败后会发生什么?在这个问题得到答案之前,我们还是先下载jQuery Deferred。本文将告诉你为什么Deferred非常有用。(以下代码依赖于jQuery1.5或更高版本)

jQuery 1.5以后,在调用jQuery的Ajax时会返回jQuery Deferred对象。文档里面说的不是很清楚,但简单地说,调用Ajax返回了一个jQuery对象,它包含了promise:promise()方法会返回一个动态生成Promise。

在现实工作中,我们使用基本的Ajax调用,不需要关心它的内部运作,只需要关心调用成功或 失败后的处理。我们继续以上面的GET请求为例, 讲解jQuery Deferred的when()、then()和fail()方法:
1 $.when($.get("content.txt"))
2 .then(function(resp) {
3    console.log("third code block, then() call");
4    console.log(resp);
5 })
6 .fail(function(resp) {
7    console.log(resp);
8 });

我们可以将上面代码理解为:
1 $.when(some ajax request).then(do this if it succeeds).fail(or do this if it fails)

它的主要特点是 $.when()里面可以写多个函数,一旦这些函数执行完成,才会调用.then():
1 $.when(fn1(), fn2()).then().fail()

你可能没有注意到这种方法的优势所在,我们可以通过下面代码进行比较。
首先,通过$.get()得到一个变量:
1 var xhrreq = $.get("content.txt");

然后,我们可以给这个变量定义.success和.error方法:
1 xhrreq.success(function(resp) {
2     console.log(resp);
3 });
4 xhrreq.error(function(resp) {
5   console.log(resp);
6 });

同样,我们可以声明多个函数去运行:
1 xhrreq.success(fn1);
2 xhrreq.success(fn2);

或者,更简单的写法:
1 xhrreq.success(fn1, fn2);

通过以上代码对比,得出结论:jQuery Deferred的when()、then()、fail()方法能够直接绑定Ajax调用后的事件;而且写法简洁,逻辑清晰。

最后,希望jQuery Deferred能在你调用jQuery Ajax时有所帮助。
分享到:
评论

相关推荐

    谈谈jQuery之Deferred源码剖析

    ### jQuery之Deferred源码剖析知识点 #### 一、Deferred和Promise简介 jQuery的Deferred对象是jQuery在ES6的Promise概念出现之前的一种实现,它允许开发者将异步操作的结果通过链式调用的方式处理,避免了传统的...

    Deferred:Deferred JS 库 - JQuery Deferred 的替代品

    Deferred.JS 是JQuery Deferred objects的替代品。 (行为与 JQuery Deferred 相同)。 阅读以了解为什么您应该从 JQuery Deferred 迁移到 Deferred.JS。 要从 JQuery Deferred 迁移到 Deferred.JS,请参阅 。 ...

    javascript异步处理与Jquery deferred对象用法总结

    本文实例讲述了javascript异步处理与Jquery deferred对象用法。分享给大家供大家参考,具体如下: 这是项目组老大整理的一些关于jquery 异步处理请求,以及使用 jquery deferred 对象的一些常见方法。虽然是项目上...

    jquery Deferred 快速解决异步回调的问题

    jQuery Deferred 是一个强大的工具,它解决了JavaScript中异步编程的一大挑战——回调地狱。在JavaScript的异步编程中,我们通常需要处理多个回调函数,当这些回调嵌套过深时,代码可读性和维护性会显著降低。jQuery...

    jQuery的deferred对象详解

    jQuery的deferred对象是为了解决在JavaScript编程中经常遇到的异步操作而设计的一个功能强大的解决方案。在开发网站的过程中,我们经常需要处理一些耗时很长的操作,这些操作可能是异步的,如ajax读取服务器数据,也...

    jQuery的deferred对象使用详解

    jQuery中的deferred对象是自jQuery 1.5.0版本引入的一种新特性,旨在解决JavaScript中异步操作的回调函数管理问题。deferred对象可以看作是一种特殊的对象,它允许你延迟到某个未来时刻执行某项操作。它是jQuery的回...

    jQuery通过deferred对象管理ajax异步

    自jQuery 1.5版本起,引入了一种强大的异步编程模式——deferred对象。这一机制允许开发者以更为优雅和灵活的方式处理异步操作,特别是针对复杂的AJAX请求。 首先,要理解什么是异步操作。在编程中,异步操作指的是...

    深入解析jQuery中Deferred的deferred.promise()方法

    在jQuery的世界里,异步编程的核心工具之一就是 Deferred 对象,它提供了一种优雅的方式来管理异步操作。本文将深入解析jQuery中 Deferred 的 `deferred.promise()` 方法,以及与 `.promise()` 的区别。 `deferred....

    jQuery中的deferred对象和extend方法详解

    jQuery中的`deferred对象`和`extend方法`是JavaScript异步编程的重要工具,尤其在处理AJAX请求和其他异步操作时非常有用。`deferred对象`是jQuery 1.5.0版本引入的,它提供了一种更优雅的方式来管理回调函数,解决了...

    jQuery中deferred对象使用方法详解

    在jquery1.5之后的版本中,加入了一个deferred对象,也就是延迟对象,用来处理未来某一时间点发生的回调函数。同时,还改写了ajax方法,现在的ajax方法返回的是一个deferred对象。 那就来看看deferred对象的用法。 1...

    reactive-promise:使 jQuery Deferred 承诺具有React性

    React式承诺使 jQuery.Deferred 承诺具有React性。关于Reactive-Promise 允许您使用承诺作为React数据源。 常见用例包括: 允许 Iron Router 路由等待一个或多个异步任务基于异步任务完成在模板中执行条件渲染使用...

    在jQuery 1.5中使用deferred对象的代码(翻译)

    jQuery中的Deferred对象是1.5版本引入的重要特性,它主要用于处理JavaScript中的异步编程模式。在传统编程中,异步操作的处理较为复杂,常常需要嵌套回调函数,使得代码难以阅读和维护。而Deferred对象提供了一种更...

    利用jQuery的deferred对象实现异步按顺序加载JS文件

    前段时间看了阮一峰的jQuery的deferred对象详解一文,对jQuery中的deferred的用法了一些了解,今天看到园子里的一篇文章:关于重构JS前端框架的失败经验(顺便怀念那些死去的代码),于是把我之前写的一个利用jQuery...

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

    在jQuery中,`deferred`对象是用来处理异步操作的一种机制,特别适用于处理多个AJAX请求的顺序执行或并行执行。它通过提供一种统一的方式来管理回调函数,使得异步编程更加灵活和易于理解。 在AJAX操作中,通常我们...

    在jQuery1.5中使用deferred对象 着放大镜看Promise

    在jQuery 1.5中,`Deferred`对象的引入是为了更好地处理异步操作,特别是与AJAX请求相关的回调。`Deferred`对象是基于Promise模式的一种实现,它允许开发者以链式调用的方式组织异步代码,提高了代码的可读性和可...

    2014-10-16-深入理解jQuery(4)——Deferred1

    Deferred对象在jQuery中的应用和实现机制 Deferred对象是jQuery中的一种异步编程解决方案,它可以使得异步编程变得更加简洁和可读。Deferred对象的出现是为了解决异步编程中的回调函数问题,使得代码更加简洁和易于...

    jQuery.deferred对象使用详解

    jQuery deferred对象是jQuery中一个重要的概念,它在jQuery 1.5版本中引入,用于更有效地处理异步操作。本文将详细介绍jQuery deferred对象的使用方法,并解释其优势。 一、什么是deferred对象? 在jQuery 1.5版本...

Global site tag (gtag.js) - Google Analytics