zoukankan      html  css  js  c++  java
  • jQuery Ajax同步参数导致浏览器假死怎么办

    https://www.cnblogs.com/panmy/p/5651732.html

    jQuery在1.5版本之后,引入了Deferred对象,提供的很方便的广义异步机制。详情可参看阮一峰老师的这篇文章  于是我用Deferred对象改写了代码,如下:

    function getData3(){       

      var defer = $.Deferred();
            $.ajax({
                url : 'p.php',           

         //async : false,
                success: function(data){
                    defer.resolve(data)
                }
            });        return defer.promise();
    }    
    $('.btn3').click(function(){
            $('.loadingicon').show();
            $.when(getData3()).done(function(data){
                $('.loadingicon').hide();
                alert(data);
            });
    });

    可以看到我在ajax请求中去掉了async:false,也就是说,这个请求又是异步的了。另外请注意success函数中的这一句:defer.resolve(data),Deferred对象的resolve方法可传入一个参数,任意类型。这个参数可以在done方法中拿到,所以我们异步请求来的数据就可以以这样的方式来返回了。

    至此,问题得到了解决。Deferred对象如此强大且方便,我们可以好好利用它。

    PS:Firefox有做优化?

    上述问题在chrome和IE9中测试结论一致。但是我在Firefox中测试时,同步ajax并未阻塞掉UI线程,也就是说这个问题根本不存在。我用其他代码做了测试,在Firefox中js线程确实是会阻塞UI线程,这个没有疑问。那可能的一个猜测就是Firefox对同步ajax做了优化,事实到底是什么,我暂未得知。有高人知道还请指点。

  • 相关阅读:
    Eclipse配置Maven的本地仓库和阿里云镜像 加速Maven更新
    layui弹出层基础参数
    鼠标悬停设置layui tips提示框
    Java实现文本中的关键字高亮,匹配所有长度
    获取指定格式的系统时间
    截取过长的字符,多余的字符将由省略号代替
    身份证处理方法(15转18,出生日期隐藏)
    layDate面板出现红色花纹图案
    layer单选框 radio的问题总结
    Android--多线程之Handler
  • 原文地址:https://www.cnblogs.com/luziluck/p/8311596.html
Copyright © 2011-2022 走看看