中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

Ajax,UTF-8還是GB2312 eval 還是execScript

兩個(gè)問(wèn)題:
第一題:
xmlhttp 的 responseText 默認(rèn)總是utf-8的編碼,前段時(shí)間為了以最小成本解決這個(gè)問(wèn)題,索性整個(gè)項(xiàng)目用utf-8編碼。網(wǎng)上解決的方法不多,而且都是比較亂七八糟的,不喜歡。又不能以后所有都用utf-8。
第二題:
xmlhttp 載入頁(yè)的Javascript腳本,不能執(zhí)行。事件的驅(qū)動(dòng)卻仍然可用,前段時(shí)間為了回避這東西,干脆把腳本全寫一起了。惡心,總這么干,每次都要載入幾百K的js文件,惡心。

那么,現(xiàn)在有時(shí)間了,最用正統(tǒng)的方式解決一下,
xmlhttp ,本來(lái)就是用來(lái)操作xml的,responseText 返回的東西,使用網(wǎng)上的二進(jìn)制硬性編碼把UTF-8改成GB2312編碼的方法自然不可靠,而且如果處理其它的編碼則無(wú)能為力。使用的 responseXML 返回的 IXMLHTTPRequest 對(duì)像,依賴xml的編碼聲明,自然不可能亂碼。沒(méi)道理不用。
<?xml version="1.0" encoding="gb2312"?>
<body>
<![CDATA[
這里將是我需要的html文本,
]]>
</body>
腳本可以這么寫一行;
returnValue = xmldom.documentElement.text;
returnValue 即是我所需要的html文本,相對(duì)硬性的以字節(jié)流去改編碼,何樂(lè)而不為呢?
第一題基本解決,管你用什么編碼,utf-8,gb2315.gbk,還是8859-1 改下文檔聲明即可。
第一個(gè)問(wèn)題即然以經(jīng)用了xml,那么第二個(gè)問(wèn)題也很容易解決,簡(jiǎn)單的分析一下我們的需求,執(zhí)行一個(gè)頁(yè)面的腳本,由其是在載入的頁(yè)上,普遍是在兩個(gè)地方,載之HTML之前的聲明和載入完成時(shí)的調(diào)用。至于頁(yè)面中的使用,用DHTML的事件驅(qū)動(dòng)即可,那么變更一下XML的結(jié)構(gòu)。
<?xml version="1.0" encoding="gb2312"?>
<content>
<!-- 需要在頁(yè)面載入前定義的腳本 -->
<onStart>
<![CDATA[
// 這里的腳本相當(dāng)于寫在head里;
]]>
</onStart>
<!-- HTML 內(nèi)容 -->
<body>
<![CDATA[
HtmlCode
]]>
</body>
<!-- 需要在頁(yè)面載入后定義的腳本 -->
<onEnd>
<![CDATA[
// 這里的腳本相當(dāng)于寫在 body 后的;
]]>
</onEnd>
</content>
處理腳本,試著寫這幾行;
BeginScript = xmldom.documentElement.selectSingleNode("onStart").text;
htmlCode = xmldom.documentElement.selectSingleNode("body").text;
endScript = xmldom.documentElement.selectSingleNode("onEnd").text;
IE下似乎沒(méi)問(wèn)題,但是firefox下報(bào)錯(cuò),可恨的firefox 下竟然是 textContent , selectSingleNode方法也不起作用, 瀏覽器識(shí)別的方法,隨處抄一個(gè)就好了。現(xiàn)在我只去管 IE 和 Firefox ,我機(jī)器上也只有這兩個(gè),再改下代碼;
以下的前三行,是從網(wǎng)易博客上抄下來(lái)的。有問(wèn)題找網(wǎng)易好了。實(shí)在懶得自己再寫,更別提讓我上網(wǎng)找了。
var isIE=(document.all&&document.getElementById&&!window.opera)?true:false;
var isMozilla=(!document.all&&document.getElementById&&!window.opera)?true:false;
var isOpera=(window.opera)?true:false;

if(isIE){
BeginScript = xmldom.documentElement.getElementsByTagName("onStart").item(0).text;
htmlCode = xmldom.documentElement.getElementsByTagName("body").item(0).text;
endScript = xmldom.documentElement.getElementsByTagName("onEnd").item(0).text;
}else{
BeginScript = xmldom.documentElement.getElementsByTagName("onStart").item(0).textContent;
htmlCode = xmldom.documentElement.getElementsByTagName("body").item(0).textContent;
endScript = xmldom.documentElement.getElementsByTagName("onEnd").item(0).textContent;
}
完成。剩下的,就是怎么去執(zhí)行。
需要?jiǎng)討B(tài)的執(zhí)行一段腳本,能常會(huì)到三種方法。
a) JavaScript 中 Global 對(duì)像的 eval() 方法;
b) DHTML window 中的 execScript() 方法;
c) JavaScript 中的 new Function(); 對(duì)像;
三種方法,各有優(yōu)劣,
第一種,腳本的上下文關(guān)系使用調(diào)用時(shí)的上下文,明顯的存在作用域問(wèn)題,執(zhí)行后的作用域僅在調(diào)用的函數(shù)或方法體內(nèi)。惡心的問(wèn)題;
第二種,本身在DHTML的頂層對(duì)像window 上執(zhí)行,不存在作用域問(wèn)題,但是execScript() 方法,卻存在瀏覽器兼容問(wèn)題。只是IE的專有方法。在Firefox 上即無(wú)法使用;
第三種,除了使用不便以外,必竟是用來(lái)聲明一個(gè)方法的,如只需要聲明一個(gè)變量的話,也是個(gè)很煩人的問(wèn)題。
如果不存在瀏覽器兼容問(wèn)題的考慮,那么使用第二種是最好的選擇。
第三種,不作考慮。
第一種,若可以解決作用域問(wèn)題,則是最好的。
我想到的方法如下;
我們?cè)诰W(wǎng)頁(yè)里聲明一個(gè)變量,
即 var author = "戲得散人";
或聲明一個(gè)函數(shù)。
即:
function getBlogUrl(){
return author + "的博客地址: http://shizhong8841.blog.163.com";
}
在這個(gè)時(shí)候,我們相當(dāng)于
window.author = "戲得散人";
window.getMyBlogUrl = function(){
return this.author + "的博客地址:http://shizhong8841.blog.163.com";
}
那么,我們只要稍微擴(kuò)展一下window對(duì)像即可。
window.runScript = function(str){
eval(str);
}
神奇的 this 接下來(lái),只要以 this.a=0; 或 this.funName = function(arg0){}; 這種方式編寫腳本,并調(diào)用 runScript(str); 方法,則相當(dāng)于在頁(yè)面中定義全局的屬性和方法,即可以辟開作用域問(wèn)題,達(dá)到我們的目的。
現(xiàn)在,全部問(wèn)題解決,并且在 InterNETElpxerer 6.0 和 Firefax 2.0 下全部通過(guò)測(cè)試。寫的代碼太亂,就不往上貼了,省的丟人,但是思想,應(yīng)該還是正確的。
更多的問(wèn)題,以后再說(shuō)。

JavaScript技術(shù)Ajax,UTF-8還是GB2312 eval 還是execScript,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本三级网址 | 亚洲精品成人在线 | 欧美三级电影在线播放 | 日韩免费网站 | 欧美午夜激情在线 | 九九热精品视频 | 毛片片| 日日夜夜免费精品 | 99亚洲精品视频 | 国产99视频精品免视看9 | 成人精品在线观看 | 五月综合色啪 | 99pao成人国产永久免费视频 | 日本不卡视频在线播放 | 国产免费a| 天天操天天干天天曰 | 人人玩人人干 | www.婷婷| 蜜桃在线一区二区三区 | 操到爽| 国产色99| 午夜三级网站 | 91一区二区三区 | yiren22综合网成人 | 成年无码av片在线 | 成人激情视频在线观看 | 久久久国产精品网站 | 亚洲欧美激情精品一区二区 | 国产精品一区在线观看 | 欧美在线a | 欧美精品一二三 | 午夜免费在线观看 | 国产一区二区在线免费观看 | 91精品在线播放 | 亚洲不卡在线视频 | 在线观看国产 | 亚洲天堂av在线 | 五月婷婷激情网 | 成人字幕网zmw | 精品欧美一区二区三区久久久 | 国产一区久久久 |