zoukankan      html  css  js  c++  java
  • [转]Ext2.0中发送同步请求

    [转]Ext2.0中发送同步请求

    转自:http://www.smellcode.cn/index.php/javascript/ext20zhongfasongtongbuqingqiu/


    在extjs的forum中,大家似乎觉得Ajax就是异步的,发送同步请求不合理,没有效率。

    但在我的开发中,确实就有。比如,在desktop中getModules要返回一个数组,如果我从后台解析一个xml,来动态生成这个数组,那么在这里 如果是直接return一个ajax调用的函数,就有可能得到一个空数组,因为数据还没有解析完成就执行了return,跳出了getModules函数 了。

    在查找了一阵子后,我在ext-base.js中找到了Ext.lib.Ajax类。

    Ext.lib.Ajax.getConnectionObject().conn可以得到一个XMLHttpRequest对象(我把它赋给xhr)。
    这里有一些关键ext-base的代码:


    getConnectionObject:function()
    {
    var o;
    var tId = this.transactionId;

    try
    {
    o = this.createXhrObject(tId);
    if (o) {
    this.transactionId++;
    }
    }
    catch(e) {
    }
    finally
    {
    return o;
    }
    },

    ////////////////////这里个方法创建了XMLHttpRequest对象////////////////////////////////////////////

    createXhrObject:function(transactionId)
    {
    var obj,http;
    try
    {

    http = new XMLHttpRequest();

    obj = { conn:http, tId:transactionId };
    }
    catch(e)
    {
    for (var i = 0; i < this.activeX.length; ++i) {
    try
    {

    http = new ActiveXObject(this.activeX[i]);

    obj = { conn:http, tId:transactionId };
    break;
    }
    catch(e) {
    }
    }
    }
    finally
    {
    return obj;
    }
    },

    然后这就相当于你用底层的js得到了这个对象后,可以做最底层的处理了。

    xhr.open(”POST”, your_url, false);

    关键是要设置false这个参数,这就可以通过xhr.send(null)发送同步请求。

    然后你就可以xhr.responseXML来得到对应的xml的完整的document对象。

    现在就可以just for fun了。

  • 相关阅读:
    auto_ptr的VC版本源码剖析
    在VS2017中配置VLD(Visual Leak Detector)内存泄漏检测工具
    QT+VS中使用qDebug()打印调试信息无法显示
    QT+VS后中文字符乱码问题
    外观模式
    装饰模式(包装模式)
    组合模式
    桥接模式
    适配器模式
    单例模式
  • 原文地址:https://www.cnblogs.com/lsjwzh/p/1319727.html
Copyright © 2011-2022 走看看