JavaScript系列一個很重要很實用但鮮為人知js函數.希望對大家有益

來源:互聯網
上載者:User

前面寫了一篇文章[一個更好用更高效的ajax架構XCallback]
地址:http://www.cnblogs.com/chenxumi/archive/2009/01/06/1370677.html 

感興趣可以看看,在引出這個函數之前,先看看這段XCallback的js代碼:
function js_method(id)
{
Ajax.Reg("[資料]","server_method",js_method);
return;
$1(id).innerHTML=Ajax.X;
}
這三步就完成了ajax調用過程 ,return之前的函數體是調用前要進行的操作,return之後是資料返回後要做的操作. Ajax.X 是伺服器返回的資料,注意到$1(id).innerHTML=Ajax.X; 這條語句用到了id,試想在函數初次調用時在retrun就已經返回了那麼資料從伺服器段返回後在這執行$1(id).innerHTML=Ajax.X; 時是怎麼知道id值得呢  熟悉json開發的人也許會立即想到eval(),的確這個是js裡的頂級函數,可以執行一段js代碼,但是eval()的函數執行的範圍會限制在調用它的函數體內 ,也就是變數只能在他調用的函數內有效。例如:
function testeval(){
eval("var id=1");
alert(id);
}
alert(id);
第一個alert可以彈出1 但是第二個alert將會找不到對象
所以id的使用範圍也限制在了testeval函數裡,再看看上面XCallback的代碼,return前後的id必然會在兩個函數裡執行,而且給id 賦值的函數和伺服器返回結果後要調用的js函數不可能在同一個函數裡,那有沒有可以執行全域變數的js函數,是有的 ,找了很長時間才找到在IE裡有個函數execScript()可以執行全域變數,用google了一下有 29,700項結果,而eval()有13,100,000項結果,的確JSon這麼火,也少不了這個

函數。注意這個函數容易出 "80020101 操作無法完成的錯誤" ,這多是要執行的js代碼不規整導致的,例如如果寫js代碼後面沒寫";"  ,就有可能出現此錯誤。剛才用ie開啟部落格園的編輯器時就出了這個對話方塊,所以一直不能用,無奈發布這篇日誌就用了firefox,剛才說的是IE,那firefox下有沒有執行全域變數的函數,答案是肯定的,要不這個編輯器在firefox下就打不開了,firefox下是:window.eval(),也許大家很疑惑 這和 eval()沒啥區別,的確也是if(eval()==window.eval()) 返回的是true,但是firefox全域變數的執行只能用window.eval()。

XCallback裡有個函數Ajax.Eval()對以上兩個方法給了封裝,你可以很方便的調用
Ajax.Eval=function(code){
    if (window.attachEvent && !window.opera) {
        execScript(code);
    }
    else
        window.eval(code);
}
另外還封裝了一個常見方法可以獲得伺服器端返回字串的js代碼: Ajax.Script(code);
如果覺得方便就用吧
最後希望大家看看這個ajax架構XCallback  嚴格講我是個很苛刻挑剔的人,對當今一些主流架構在ajax使用上都不是很滿意, 但是很喜歡XCallback, 有興趣地看看 ,樣本、程式集、源碼及注釋都有
http://chenxumi1.vhost015.cn/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.