Ajax同步调用影响加载动画展示

前几日项目工作的时候遇到了“ajax处理图片的时候 点击提交遮罩层和加载中展示不出来”的问题,记录一下

问题描述:在做录入文章到时候,由于外部图片权限问题,在app展示的时候无法访问,所以需要在文章提交的时候做一下图片处理,这里使用ajax同步上传到服务器 返回url替换掉 原来的img的src;问题出现在点提交的时候页面卡死 遮罩层和加载图显示不出来;

解决方案:

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

修改前代码

                        $.ajax({
                            url: ctx + '/document/remote2Cos.php',
                            async: false,
                            type: 'post',
                            dataType: 'json',
                            data: {"fileUrl":src},
                            success: function (data) {
                                obj.attr("src",data.url);
                            }
                        })

修改后代码

                        var deferred = $.Deferred();
                        $.ajax({
                            url: ctx + '/document/remote2Cos.php',
                            type: 'post',
                            dataType: 'json',
                            data: {"fileUrl":src},
                            success:function (data) {
                                obj.attr("src",data.url);
                                deferred.resolve(data);
                            }
                        });
                        return deferred.promise;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值