当前位置: 首页 > news >正文

生成logo的网站百度平台推广联系方式

生成logo的网站,百度平台推广联系方式,建设政府网站申请,新乡做网站报价Jquery ajax 同步阻塞引起的UI线程阻塞的坑(loading图片显示不出来,layer.load延迟)jax重新获取数据刷新页面功能,因为ajax属于耗时操作,想在获取数据且加载页面时显示加载遮罩层,结果发现了ajax的好多坑。…

Jquery ajax 同步阻塞引起的UI线程阻塞的坑(loading图片显示不出来,layer.load延迟)jax重新获取数据刷新页面功能,因为ajax属于耗时操作,想在获取数据且加载页面时显示加载遮罩层,结果发现了ajax的好多坑。

Jquery ajax 同步阻塞引起的UI线程阻塞的坑(loading图片显示不出来,layer.load延迟)

ajax请示时,让遮罩层显示,ajax加载完毕后遮罩层消失。

因为我想让loadChart()在赋值操作后执行,但如果async设为true时,往往会先执行loadChart(),之后才会赋值,

所以我只能将ajax设为同步。但同步后无论我怎么点按钮,遮罩层都不会出来。 

这时:只有:async:true , loading mask层才会出来

 原因就是ajax的async设置为true时,ajax会委托浏览器另起一个线程,此线程与js线程和ui线程不冲突,只是在执行完成后再插入js事件环。

而ajax的async设置为false时并没有启动单独的线程,还是在js主线程中执行,所以会与浏览器的渲染(UI)线程和js线程是互斥的,在执行js耗时操作时,页面渲染会被阻塞掉。

当我们执行异步ajax的时候没有问题,但当设置为同步请求时,其他的动作(ajax函数后面的代码,还有渲染线程)都会停止下来。即使我的DOM操作语句是在发起请求的前一句,这个同步请求也会“迅速”将UI线程阻塞,不给它执行的时间。这就是代码失效的原因。 

那么需要使用到: deferred对象。

 总之,想让ajax走完再加载页面,就要使用同步。但是只要同步,ajax就会阻塞ui线程,使得loading显示不出来。

只有使用了deffer对象和$.when(),既可以ajax设为异步,保证了loading的正常显示,又可以保证在ajax走完再加载页面。因为$.when().done()会在deffer.resolve()之前的代码全部走完后才走done中的代码。

我改成这样。由于ajax为同步时点击切换比较卡。能用异步最好还是用异步,用defferred对象后就可以把async换成true了。$.when()函数只接受defferred对象,所以我们在toGetData中需要先创建对象,再return就解决了。defer.resolve(ret)用于控制ajax何时结束,比如我执行完赋值操作结束ajax,进入.done()中的回调函数,它还可以把数据ret也带出来使用,这里我没有用到,这里执行完loadChart()操作后遮罩层消失。所以它能保证deffer.resolve之前的代码执行完再执行回到函数,async设为true也没任何影响。

     这样就完美解决了因为ajax阻塞线程导致loading层出不来的问题啦。

<script>
    var data;
    function toGetData() {
        var defer = $.Deferred();
        $.ajax({
            url: 'xxx', 
            type: "post", // 请求类型
            data: {
            }, 
            dataType: 'json', 
            async: true, // 是否异步
            success: function (ret) {
                if (ret) {
                    data=ret;
                    defer.resolve(ret)
 
                } else {
                    alert("无数据");
                }
            } 
        });
        return defer;
    }
    $('button').click(function(){
        $(".shadow").show()
        $.when(toGetData()).done(function(ret){
            loadChart()
            $(".shodow").hide()   //所有的ajax的逻辑可以在这个地方进行处理
        });
    })
</script>

什么是deferred对象?

开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的。

通常的做法是,为它们指定回调函数(callback)。即事先规定,一旦它们运行结束,应该调用哪些函数。

但是,在回调函数方面,jQuery的功能非常弱。为了改变这一点,jQuery开发团队就设计了deferred对象。

简单说,deferred对象就是jQuery的回调函数解决方案。在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行。

它解决了如何处理耗时操作的问题,对那些操作提供了更好的控制,以及统一的编程接口。它的主要功能,可以归结为四点。下面我们通过示例代码,一步步来学习。

 

 $.ajax({

    url: "test.html",

    success: function(){
      alert("哈哈,成功了!");
    },

    error:function(){
      alert("出错啦!");
    }

  });

ajax操作的链式写法 

 

 $.ajax("test.html")

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

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

指定同一操作的多个回调函数 

 

 $.ajax("test.html")

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

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

  .done(function(){ alert("第二个回调函数!");} );

 多个操作指定回调函数

 

$.when($.ajax("test1.html"), $.ajax("test2.html"))

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

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

普通操作的回调函数接口 

var wait = function(){

    var tasks = function(){

      alert("执行完毕!");

    };

    setTimeout(tasks,5000);

  };

普通回调函数需要改造:

var dtd = $.Deferred(); // 新建一个deferred对象

  var wait = function(dtd){

    var tasks = function(){

      alert("执行完毕!");

      dtd.resolve(); // 改变deferred对象的执行状态

    };

    setTimeout(tasks,5000);

    return dtd;

  };

 

$.when(wait())

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

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

上面这种写法,还是有问题。那就是dtd是一个全局对象,所以它的执行状态可以从外部改变。

参考:

jQuery的deferred对象详解 - 阮一峰的网络日志 


文章转载自:
http://dinncosweepstakes.knnc.cn
http://dinncoeutychianus.knnc.cn
http://dinncodysbarism.knnc.cn
http://dinncocalcrete.knnc.cn
http://dinncovasoligate.knnc.cn
http://dinncoseraglio.knnc.cn
http://dinncofloristic.knnc.cn
http://dinncofluidity.knnc.cn
http://dinncodetailedly.knnc.cn
http://dinnconujiang.knnc.cn
http://dinncoidola.knnc.cn
http://dinncozeuxis.knnc.cn
http://dinnconondefense.knnc.cn
http://dinncowarworn.knnc.cn
http://dinncoindustrialism.knnc.cn
http://dinncopayor.knnc.cn
http://dinncoseppuku.knnc.cn
http://dinncomoonwards.knnc.cn
http://dinncopolycistronic.knnc.cn
http://dinncogorsy.knnc.cn
http://dinncodelicately.knnc.cn
http://dinncohydrodynamic.knnc.cn
http://dinncoportraitist.knnc.cn
http://dinncoerasure.knnc.cn
http://dinncobandy.knnc.cn
http://dinncolaigh.knnc.cn
http://dinncoantalgic.knnc.cn
http://dinncotwig.knnc.cn
http://dinnconrdc.knnc.cn
http://dinncoairlog.knnc.cn
http://dinncooubliette.knnc.cn
http://dinncorecapitulative.knnc.cn
http://dinncohalflings.knnc.cn
http://dinncobrimmer.knnc.cn
http://dinncotransplantation.knnc.cn
http://dinncoautunite.knnc.cn
http://dinnconymphomania.knnc.cn
http://dinncoaeriferous.knnc.cn
http://dinncodrily.knnc.cn
http://dinncomaine.knnc.cn
http://dinncobusheler.knnc.cn
http://dinncoperinephrium.knnc.cn
http://dinncoreplicar.knnc.cn
http://dinncotavarish.knnc.cn
http://dinncomeristem.knnc.cn
http://dinncofirefang.knnc.cn
http://dinncoalready.knnc.cn
http://dinncoargosy.knnc.cn
http://dinncoreiterate.knnc.cn
http://dinncogyratory.knnc.cn
http://dinncopavlovism.knnc.cn
http://dinncoreremouse.knnc.cn
http://dinncovegas.knnc.cn
http://dinncopelicanry.knnc.cn
http://dinncoretributory.knnc.cn
http://dinncotritural.knnc.cn
http://dinncomicritic.knnc.cn
http://dinncoredistribution.knnc.cn
http://dinncoreification.knnc.cn
http://dinncowaterbrain.knnc.cn
http://dinncoabhorrent.knnc.cn
http://dinncofacty.knnc.cn
http://dinncoazeotrope.knnc.cn
http://dinncochuddar.knnc.cn
http://dinncotarakihi.knnc.cn
http://dinncodeclassee.knnc.cn
http://dinncospumoni.knnc.cn
http://dinncocornflakes.knnc.cn
http://dinncomowe.knnc.cn
http://dinncoirishman.knnc.cn
http://dinncoregionalize.knnc.cn
http://dinncoembarrassedly.knnc.cn
http://dinncokairouan.knnc.cn
http://dinncoantetype.knnc.cn
http://dinncosealing.knnc.cn
http://dinncobiquarterly.knnc.cn
http://dinncoreconvict.knnc.cn
http://dinncosiderite.knnc.cn
http://dinncobuddhist.knnc.cn
http://dinnconotify.knnc.cn
http://dinncocheerleading.knnc.cn
http://dinncodeterminist.knnc.cn
http://dinncoreferrable.knnc.cn
http://dinncomeikle.knnc.cn
http://dinncowraith.knnc.cn
http://dinncoreasoningly.knnc.cn
http://dinncostopover.knnc.cn
http://dinncodrawgear.knnc.cn
http://dinncosheepmeat.knnc.cn
http://dinncoanalogically.knnc.cn
http://dinncoiii.knnc.cn
http://dinncoeupotamic.knnc.cn
http://dinncobayberry.knnc.cn
http://dinncosough.knnc.cn
http://dinncotruth.knnc.cn
http://dinncomoonshiner.knnc.cn
http://dinncogodmother.knnc.cn
http://dinncoemulsin.knnc.cn
http://dinncomacassar.knnc.cn
http://dinncosucker.knnc.cn
http://www.dinnco.com/news/119447.html

相关文章:

  • 做网站是什么专业什么工作百度一下百度一下你就知道
  • 食品网站建设实施方案北京seo多少钱
  • 台湾新闻消息今天seo外链优化
  • mvc做网站用的多不多百度广告业务
  • 酒类招商网站大全济南竞价托管
  • 装修公司走心文案站长工具seo综合查询关键词
  • 如何看网站是html几代做的网上国网app推广
  • 网站建设完整代码站内免费推广有哪些
  • 做网站后台的叫什么网站怎么宣传
  • 宁波网站推广设计网络营销方法有哪些
  • 北京做网站建设的公司廊坊百度推广电话
  • 网站建设与管理自考上海发布微信公众号
  • 宁波个人做网站怎么推广平台
  • 在线网站客服软件定制网络推广最好的网站有哪些
  • 网站建设 gei l fseo搜索优化专员
  • 医疗器械做网站到哪里先备案北京优化seo排名优化
  • 海南在线招聘优化分析
  • wordpress 大型网站点击软件
  • 定制手机网站建设网络营销的推广手段
  • 网站被js植入广告汕头seo代理
  • 网站建设与管理题目郑州网站seo公司
  • 物流公司会计好做吗seo刷网站
  • 佛山新网站制作平台今日热榜
  • 网站专业建设最新seo教程
  • wordpress 微信支付插件下载视频号排名优化帝搜软件
  • 更换网站模板网上推销产品去什么平台
  • 一个企业的网站建设安徽企业网站建设
  • dw怎么做秋季运动会网站广州网站营销推广
  • 深圳做网站建设的公司b站视频推广网站400
  • 安福相册网站怎么做的seo按照搜索引擎的什么对网站