jquery里Deferred(延迟)对象的常用实例亲测 原创 收藏


  • :
  • 04-05 21:18
  • :
  • 17次
  • :
  • 0条
  • 0赞

简介本文总结了jquery里延迟对象deferred在日常web开发中,经常会用到的几个实例,通过这些实例,可以让你快速的掌握deferred对象的使用方法。

以前站长写过一篇文章来介绍jquery里的延迟对象,也就是Deferred对象:jquery延迟(deferred)对象和回调函数详解,不过站长相信肯定还有很多人和站长一样,对jquery里的延迟deferred对象还是会感觉点那么迷惑。

没关系,站长会经常整理一些和deferred相关的具体实例,通过这些实例,相信,即使你还是不太了解deferred,但也能在这些具体实例的基础上,拿去自己应用。

实例1:点击按钮后,发送ajax请求,获取到数据后,执行指定的函数:

//下面是通过ajax获取数据的函数
function GetData(){
    var defer=$.Deferred();
    $.ajax({
        url:"请求的地址",
        type:"POST",
        success:function(data){
           defer.resolve(data); 
        }
    });
    return defer.promise();
};
//下面是具体的点击按钮后的实例
$("button").on("click",function(){
    $.when(GetData()).done(function(data){
        //data就是上面ajax里获取到的数据内容了
        //这里可以根据data来执行我们需要的操作
    });
});

实例2:动态执行或不执行ajax请求:

站长在web开发中,做了个上传的功能,这个上传限制的是单文件上传,但在上传视频的时候,需要同步上传视频的封面,这也就意味着我们的程序里,有可能会发送两个上传数据的请求,也有可能只发送一次,站长的代码是这样来实现的:

//上传数据的函数:
var UpData=function(data){
    return $.ajax({
        url:"接收数据的服务器URL",
        data:data,
        contentType:false,//不设置内容类型
	processData:false//不处理数据
    });
};

//上传封面
var UpPoster=function(data){
    var defer=$.Deferred();
    if(data){
        return DoUp(data);
    }else{
        defer.resolve();
        return defer;
    };
};
//上面这个函数里,我们定义了一个Deferred对象,这样,在没有数据的时候,我们就设计它的状态为resolve,让程序可以继续往下运行,如果有数据的话,那么就返回ajax本身的deferred对象

//上传视频:
$.when(UpPoster()).done(function(data){
    //这里的data,是上面上传封面时的ajax返回的数据,切记,切记,切记!
    //在这里可以根据data来判断封面是否上传成功
    DoUp(视频数据).done(function(){
        //视频上传成功
    });
});

站长就是通过上面这些代码来实现的,不管上传的是不是视频,都能正常上传,如果上传的是视频的话,会先上传封面图片,封面图片上传成功后,才会开始上传视频。

因为站长也是刚开始使用deferred对象,所以站长也的可能不是最佳的方法!



您正在找的文章可能是: