Ext2.0中發送同步請求

來源:互聯網
上載者:User
[轉]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了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.