jquery中的promise

参考 http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html

从jQuery1.5版本之后 ajax方法进行了重写,和以前不一样了。如今$.ajax()将返回一个Promise/Deffered对象

这个对象里面有done() fail() always()  then() promise()  reject()等方法

以前发ajax这么写

  $.ajax({

    url: "test.html",

    success: function(){

      alert("哈哈,成功了!");

    },

    error:function(){

      alert("出错啦!");

    }

  });

现在则是

$.ajax({

url: ‘/path/to/file‘,

type: ‘default GET (Other values: POST)‘,

dataType: ‘default: Intelligent Guess (Other values: xml, json, script, or html)‘,

data: {param1: ‘value1‘},

}).done(function() {

console.log("success");

}).fail(function() {

console.log("error");

}).always(function() {

console.log("complete");

});

很显然,done()相当于success() fail()就是error()

或者

$.ajax({

url: ‘test1.json‘,

dataType: ‘text‘,

}).then(function(res){

alert(‘wahha‘);

console.log(res);

});

可以为不同的请求使用相同的回调

$.when($.ajax({

url: ‘test1.json‘,

dataType: ‘text‘,

}),$.ajax({

url: ‘test2.json‘,

dataType: ‘text‘,

})).done(function(res){

alert(‘wahha both‘);

console.log(res);//第一个ajax请求的响应

})

为普通函数增加回调函数

这是最建议的方式

  var wait = function(dtd){

    var dtd = $.Deferred(); //在函数内部,新建一个Deferred对象

    var tasks = function(){

      alert("执行完毕!");

      dtd.resolve(); // 改变Deferred对象的执行状态  resolve表示解决

    };

    setTimeout(tasks,5000);

    return dtd.promise(); // 返回promise对象

  };

  $.when(wait())

  .done(function(){ alert("哈哈,成功了!"); })

  .fail(function(){ alert("出错啦!"); });

源博文先前是将$.Deferred() 当做全局对象,不过那样可以在全局中改变执行的状态。

因此他又用了deferred.promise()

最后用到了是将deferred放在函数内,解决了这个问题

所以以后多个嵌套的ajax请求可以这么写

var promiseA = $.get(urlA);

promiseA.always(doneFnA, failFnA, progressFnA);

var promiseB = promiseA.then(function(){

return $.get(urlB);

});

promiseB.always(doneFnB, failFnB, progressFnB);

时间: 2024-10-09 15:25:56

jquery中的promise的相关文章

大白话讲解Promise(三)搞懂jquery中的Promise

http://www.cnblogs.com/lvdabao/p/jquery-deferred.html @吕大豹 前两篇我们讲了ES6中的Promise以及Promise/A+规范,在Promise的知识体系中,jquery当然是必不可少的一环,所以本篇就来讲讲jquery中的Promise,也就是我们所知道的Deferred对象. 事实上,在此之前网上有很多文章在讲jquery Deferred对象了,但是总喜欢把ajax和Deferred混在一起讲,容易把人搞混.when.done.pr

jquery中的Promise 之二

参考 http://www.bitstorm.org/weblog/2012-1/Deferred_and_promise_in_jQuery.html http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/ <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"

深入理解jQuery、Angular、node中的Promise

最初遇到Promise是在jQuery中,在jQuery1.5版本中引入了Deferred Object,这个异步队列模块用于实现异步任务和回调函数的解耦.为ajax模块.队列模块.ready事件提供基础功能.在用jQuery操作DOM的时候对Promise的使用欲不够强烈,最近学习node和Angular,需要用js写业务逻辑和数据操作代码的时候这种场景需求就出来了.一般来说事件适合在交互场景中运用,因为用户的行为本来就是分散的,而promise这样的流程控制适合在后台逻辑中处理业务. //j

$q 实例分析 Angular 中的 Promise

相信有一些开发经验的朋友就应该知道,对于JavaScript而言,promise十分重要,在开发中总能用到.因此掌握好它是一件必须做的事情. 我之前写过一篇文章,工作总结:jQuery高级应用之Deferred对象,介绍jquery中的promise,因此关于promise的基础介绍就不再详细讲解,这篇文章会重点关注angular中promise的实现. 我们首先有一个简单的html标签,下面的例子都会基于这个标签来书写 <div ng-app="app" ng-controll

彻底理解Javascript 中的 Promise

ES6原生提供了 Promise 对象. 到底是何方妖怪呢?打出来看看: 所谓 Promise,就是一个对象,用来传递异步操作的消息.它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的 API,可供进一步处理. Promise 对象有以下两个特点. (1)对象的状态不受外界影响.Promise 对象代表一个异步操作,有三种状态:Pending(进行中).Resolved(已完成,又称 Fulfilled)和 Rejected(已失败).只有异步操作的结果,可以决定当

jQuery中的$.Deferred、$.when异步操作

前言 网页中常常会出现一些耗时比较长的操作,如ajax请求服务器数据,这些操作都不能立即得到结果.如果我们需要在这些操作执行完后来进行另外的操作,我们就需要将这些操作放在回调函数中,$.Deferred就是jQuery用来处理回调操作的.jQuery中的$.Deferred对$.Callbacks很有依赖,看看$.Callbacks执行回调. 1 var callbacks = $.Callbacks(); 2 setTimeout(function(){ 3 console.log(1); /

深入理解jQuery中的Deferred

引入 1  在开发的过程中,我们经常遇到某些耗时很长的javascript操作,并且伴随着大量的异步. 2  比如我们有一个ajax的操作,这个ajax从发出请求到接收响应需要5秒,在这5秒内我们可以运行其他代码段,当响应到达后,我们需要判断响应的结果(无非就是成功或者失败),并根据不同的结果  添加回调函数. 3  为了有效的简洁的添加回调函数jQuery引入了Callbacks. 4  而为了方便的 根据不同的结果(或者根据各种跟结果有关的逻辑,比如不管是成功或者失败) 添加回调函数,jQu

Javascript中的Promise

Promise定义 Promise是CommonJs的规范之一,包含resolve,reject,done,fail,then等方法,能够帮助我们控制代码的流程,避免函数的多层嵌套.异步在web开发中越来越重要,对于开发人员来说,J非线性执行的编程会让开发者觉得难以掌控,而Promise可以让我们更好地掌控代码的执行流程,jQuery等流行的js库都已经实现了这个对象,现在ES6已经原生实现了Promise. 场景说明: 有时候会遇到这样的情况,需要发两个异步请求,而第二个请求需要用到第一个返回

jQuery中的编程范式

浏览器前端编程的面貌自2005年以来已经发生了深刻的变化,这并不简单的意味着出现了大量功能丰富的基础库,使得我们可以更加方便的编写业务代码,更重要的是我们看待前端技术的观念发生了重大转变,明确意识到了如何以前端特有的方式释放程序员的生产力.本文将结合jQuery源码的实现原理,对javascript中涌现出的编程范式和常用技巧作一简单介绍.    1. AJAX: 状态驻留,异步更新      首先来看一点历史. A. 1995年Netscape公司的Brendan Eich开发了javacri