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做了优化,事实到底是什么,我暂未得知。有高人知道还请指点。

  • 相关阅读:
    转:MVC分页
    转:更新Android SDK之后Eclipse提示ADT版本过低的一个简易解决办法
    DataGridView 添加鼠标右键选择行
    WinForm 中使用ScintillaNet
    C#获取当前程序运行路径的方法集合
    Winform DataGridView鼠标右键选择列
    EF 数据查询(更改默认排序)
    使用lambda表达式进行对象结合的筛选操作
    使用SSIS生成数据导出为Excel文件的模板
    Sql server 数据库中计算每天的开始结束时间
  • 原文地址:https://www.cnblogs.com/luziluck/p/8311596.html
Copyright © 2011-2022 走看看