ExtJS问题(1)- Ajax中LoadMask未显示的问题

首先,介绍下问题,

缘由:我用Ext.Ajax来获取数据,由于后台数据较多,所以在Ajax前调用了下LoadMask来显示等待遮罩,待获取数据后取消遮罩。

现象:遮罩未显示,我在chrome中断点代码,断点到显示遮罩后、调用Ajax前的时候遮罩显示。

代码:(Ext版本4.2)

var myMask = new Ext.LoadMask(Ext.getBody(), {msg:"Please wait..."});
myMask.show();
Ext.Ajax.request({
    url: ‘ctrl/...‘,
    params: params,
    async:false,
    success: function(res){
        myMask.hide();
        ……
    }
});

然后,根据现象分析问题,做推断和尝试

发现遮罩不能显示后首先想到的是代码问题,于是打断点查看各参数是否正常,但是断点打到myask.show()时,发现遮罩已经显示,取消断点,再跑,遮罩还是不显示。

然后注释掉了success中myMask.hide()方法,再观察发现,遮罩在加载完数据的时候显示出来了(由于这个接口时间比较长,达15s左右)。

现在可以得出一点,遮罩未显示并不是真的没有显示,而是遮罩显示的太晚(在Ajax加载完成之后),刚显示出来就被关闭了。

然后我尝试着把async设置为了true,就是默认的异步模式,发现完全正常了,遮罩可以在触发时立马显示,然后Ajax获取数据后正常关闭。

最后,思考问题的原因

由于一不小心尝试处理解决方法,于是跳过寻找解决方法这步,直接开始思考问题的原因。

首先问题肯定跟同步异步有关,js的ajax本就是异步的,在异步下遮罩的显示也正常,而在同步的情况下,遮罩的显示就推迟到了Ajax获取数据之后了。

于是推断Ext的Ajax同步时,页面上DOM结构有改动的话会在Ajax之后执行,带着这种想法,我在Ajax之前用container add了一个按钮:

container.add(btn)

发现此按钮在同步的情况下也会在Ajax返回后再显示出来。

根据以上的现象,我推断Ext的Ajax在调用同步调用的时候,会暂停DOM修改,然后再在Ajax调用完成后一起显示。

有了解更多详情的朋友还请不吝赐教。

时间: 2024-10-09 14:26:59

ExtJS问题(1)- Ajax中LoadMask未显示的问题的相关文章

ajax中网页传输(三)XML——下拉列表显示练习

XML:页面之间传递数据,跨平台传递 HTML:超文本标记语言,核心标签 XML的形势为 <xml version='1.0'> <Nation> <one> <code>n001</code> <name>汉族</name> </one> <two> <code>n002</code> <name>苗族</name> </two> <

EXTJS中的grid显示实际行号

添加一个新的功能 [javascript] view plaincopy Ext.grid.PageRowNumberer = Ext.extend(Ext.grid.RowNumberer, { width : 40, renderer:function(value, cellmeta, record, rowIndex, columnIndex, store){ if(store.lastOptions.params!=null){ var pageindex=store.lastOptio

ajax中的stasus错误详解

一.英文版解析 0: (Uninitialized) the send( ) method has not yet been invoked. 1: (Loading) the send( ) method has been invoked, request in progress. 2: (Loaded) the send( ) method has completed, entire response received. 3: (Interactive) the response is be

转:AJAX中xhr对象详解

XJAX ,并不是一种新技术的诞生.它实际上代表的是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用. 它包括: 使用XHTML和CSS标准化呈现: 使用DOM实现动态显示和交互: 使用XML和XSLT进行数据交换与处理: 使用XMLHttpR XJAX ,并不是一种新技术的诞生.它实际上代表的是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用. 它包括: 使用XHTML和CSS标准化呈现: 使用DOM实现动态显示和交互: 使用XML和XSLT进行数据交换与处理: 使用XMLHt

ajax中网页传输(一)TEXT——带有删除功能的数据库表格显示练习

网页之间传输的三种方式:TEXT.JSON.XML. 本章将讲解带有TEXT形势的ajax网页传输 第一:body部分代码 <title>ajax中TEXT讲解并且带有删除功能的表格</title> <script src="jquery-2.0.0.min.js"></script> <style type="text/css"> .sc { width:70px; height:30px; backgr

jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器

jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTransport, 3.类型转换器 ajaxConvert 源码结构: jQuery.extend({ /** * 前置过滤器 * @type {[type]} */ ajaxPrefilter: addToPrefiltersOrTransports(prefilters), /** * 请求分发器 *

RobotFramework-----第二次执行case时,log窗口未显示数据

第二次执行case时,log窗口未显示数据,如下图 原因:case运行时,是使用IE或是chrome浏览器,运行一次后IEDriverServer.exe或chromedriver.exe进程仍在运行中. 解决方案: 方法一:在任务管理器中,将后IEDriverServer.exe或chromedriver.exe进程结束 方法二: 将下面代码保存为批处理,每次运行后手动运行一下: taskkill /f /im  chromedriver.exe taskkill /f /im  IEDriv

AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序

测试代码: [c-sharp] view plaincopy 测试代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="AjaxCtpWebDemo.Test" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona

有序序列ol li 详解(ol li 标号未显示?)

ol定义和用法 <ol> 标签定义了一个有序列表. 列表排序以数字来显示.使用<li> 标签来定义列表选项. 基本语法如下: <ol> <li>菠萝</li> <li>西瓜</li> <li>火龙果</li> </ol> 运行结果: ol属性 属性 值 描述 compact compact HTML5中不支持,不赞成使用.请使用样式取代它. 规定列表呈现的效果比正常情况更小巧. reve