[转]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了。

原文地址:https://www.cnblogs.com/lsjwzh/p/1319727.html