美文网首页
ajax异步模式下实现同步和等待loading效果(jQuery

ajax异步模式下实现同步和等待loading效果(jQuery

作者: wolfe404 | 来源:发表于2019-09-25 20:44 被阅读0次

ajax异步模式下实现同步和等待loading效果(jQuery同步Ajax带来的UI线程阻塞问题及解决办法)
在与后台实现数据交互时经常会遇到一种这样的情况:

1.需要用一个ajax请求后台数据,并且要在获取到数据之后再渲染到页面,这个时候就必须用同步(async:false)。

2.然而在这个时候就会有另一种情况,当ajax的请求花费的时间比较长的时候需要一个loading层来显示等待状态

3.这个时候beforeSend是没有效果的,即使把loading的代码写在ajax之前也不行。

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

5.解决方法使用jquery的.Deferred()和.when().done()来实现异步下达到同步执行的效果(注意:是在异步下实现的)

function getAjaxData() {
 
    var defer = $.Deferred();
 
    $.ajax({
        url: '',
        type: 'post',
        data: '',
        async: true,
        dataType: 'json',
        success: function (data) {
            defer.resolve(data);
        }
    });
 
    return defer;
}
 
 
// 执行
$('#id').click(function () {
 
    showLoading(); // 显示等待图标
 
    $.when(getAjaxData()).done(function (data) {
 
        closeLoading(); // 隐藏等待图标
 
        console.log(data);
        // 执行其他代码
    });
});

相关文章

  • ajax异步模式下实现同步和等待loading效果(jQuery

    ajax异步模式下实现同步和等待loading效果(jQuery同步Ajax带来的UI线程阻塞问题及解决办法)在与...

  • AJAX-全集

    同步+异步 Ajax同步+异步 JavaScript之(AJAX) JQuery之(AJAX) JQuery-有f...

  • Ajax

    1.什么是ajax Ajax是一种传输的工具,实现异步和同步的传输模式。 Ajax常用的是异步,异步是指刷新页面时...

  • ajax中的async属性值之同步和异步及同步和异步区别

    jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时...

  • 前端面试题:同步和异步的区别?

    理解a: 举个例子:普通B/S模式(同步)AJAX技术(异步) 同步:提交请求 >> 等待服务器处理 >> 处理完...

  • ajax

    一、ajax概念: 异步与同步 实现 ajax:1.各种类库和框架实现 后端jsonp处理: 例如: echo ...

  • AJAX

    同步和异步 异步的javascript和xml就是AJAX,不用全部重新加载,可以实现异步请求,局部刷新的功能。 ...

  • AJAX 教程

    AJAX 教程 jQuery - AJAX 简介:AJAX = 异步 JavaScript 和 XML(Async...

  • 前端学习笔记二十六-Vue之前后端交互

    一、前后端交互模式 接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 Java...

  • 2018 10 21

    学习jQuery下的ajax方法获取异步刷新数据

网友评论

      本文标题:ajax异步模式下实现同步和等待loading效果(jQuery

      本文链接:https://www.haomeiwen.com/subject/rwmwuctx.html