最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

編碼為GB2312網(wǎng)站讓AJAX接收的數(shù)據(jù)顯示支持中文

 更新時(shí)間:2010年01月25日 22:29:35   作者:  
GB2312 網(wǎng)站AJAX接收的數(shù)據(jù)顯示支持中文
復(fù)制代碼 代碼如下:

<script>
var xmlHttp;
var BrowerType="ie";
function createXML(){
try{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e){
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e2) {
xmlHttp =false;
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined'){
xmlHttp = new XMLHttpRequest();
BrowerType = "ff"; //用于記錄是否火狐,以便下面處理接收中文數(shù)據(jù)分析使用。
}
}
function querytelcode(citys){
createXML();
showState=document.getElementById("showtelcode");
xmlHttp.onreadystatechange = function(){
if (xmlHttp.readyState == 2){
showState.innerHTML = '<img src="/img/process.gif" />';
}else if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
if (BrowerType=="ff"){
getLastCode=xmlHttp.responseText;//FireFox
}else{
getLastCode=gb2utf8(xmlHttp.responseBody);
}
showState.innerHTML = getLastCode;
}
}
var url='myorderAjax.asp?oid=<%=Request.QueryString("orderid")%>&cityname='+citys;
xmlHttp.open ("GET",url,true);
if (BrowerType=="ff"){
xmlHttp.overrideMimeType("text/html;charset=gb2312");//設(shè)定以gb2312編碼識(shí)別數(shù)據(jù),只有FF支持。IE不行
}
xmlHttp.send(null);
}
function gb2utf8(data){
var glbEncode = [];
gb2utf8_data = data;
execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");
var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2");
t=t.split("@");
var i=0,j=t.length,k;
while(++i<j) {
k=t[i].substring(0,4);
if(!glbEncode[k]) {
gb2utf8_char = eval("0x"+k);
execScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript");
glbEncode[k]=escape(gb2utf8_char).substring(1,6);
}
t[i]=glbEncode[k]+t[i].substring(4);
}
gb2utf8_data = gb2utf8_char = null;
return unescape(t.join("%"));
}
</script>

以下是此篇文章全文:
XMLHttpRequest 默認(rèn)是用UTF-8 傳遞數(shù)據(jù)。當(dāng)服務(wù)端的返回?cái)?shù)據(jù)是UTF-8編碼的時(shí)候,它工作得很好(開發(fā)web應(yīng)用,當(dāng)服務(wù)端和客戶端以及數(shù)據(jù)庫統(tǒng)一使用UTF-8編碼可以有效的避免亂碼問題)。如果服務(wù)端設(shè)置了正確的Content-Type Response Header以及編碼信息,那么XmlHttpRequest也可以正確工作。
可是當(dāng)使用XMLHttpRequest讀取中文網(wǎng)頁內(nèi)容時(shí), 如果服務(wù)端的程序沒有設(shè)置Content-Type Response Header,或者Header沒有設(shè)置編碼類型,那么我們訪問responseText屬性的時(shí)候就可能遭遇亂碼。如以下代碼用XMLHttpRequest獲取雅虎中國網(wǎng)站的星座站首頁:
復(fù)制代碼 代碼如下:

xmlhttp = getXMLHttpRequest();
var url = "http://cn.astrology.yahoo.com/";;
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200)
alert(xmlhttp.responseText);
};
xmlhttp.send(null);

縱使yahoo中國這樣專業(yè)的網(wǎng)站,對web標(biāo)準(zhǔn)的支持還很不徹底,彈出的html源碼中充斥不符合web標(biāo)準(zhǔn)的html標(biāo)簽,當(dāng)然還有已預(yù)見的亂碼。
同樣遺憾的是,F(xiàn)ireFox 和 IE 的解決方法也是南轅北轍
FireFox 做法:
FireFox 的XMLHttpRequest對象支持overrideMimeType方法,可以指定返回?cái)?shù)據(jù)的編碼類型,利用該方法可以解決中文亂碼,前面的代碼修改如下:
復(fù)制代碼 代碼如下:

xmlhttp = getXMLHttpRequest();
var url = "http://cn.astrology.yahoo.com/";;
xmlhttp.open("GET", url, true);
xmlhttp.overrideMimeType("text/html;charset=gb2312");//設(shè)定以gb2312編碼識(shí)別數(shù)據(jù)
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200)
alert(xmlhttp.responseText);
};
xmlhttp.send(null);

Internet Explorer 做法:
IE不支持overrideMimeType方法,并且只能用一種很蹩腳的方法來解決,此時(shí)需要引入一個(gè)雜交的函數(shù):
復(fù)制代碼 代碼如下:

function gb2utf8(data){
var glbEncode = [];
gb2utf8_data = data;
execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");
var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2");
t=t.split("@");
var i=0,j=t.length,k;
while(++i<j) {
k=t[i].substring(0,4);
if(!glbEncode[k]) {
gb2utf8_char = eval("0x"+k);
execScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript");
glbEncode[k]=escape(gb2utf8_char).substring(1,6);
}
t[i]=glbEncode[k]+t[i].substring(4);
}
gb2utf8_data = gb2utf8_char = null;
return unescape(t.join("%"));
}
xmlhttp = getXMLHttpRequest();
var url = "http://cn.astrology.yahoo.com/";;
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200)
alert(gb2utf8(xmlhttp.responseBody)); //注意這里要用responseBody
};
xmlhttp.send(null);

gb2utf8函數(shù)直接解析XMLHttpRequest返回的二進(jìn)制數(shù)據(jù),其中要利用execScript方法來執(zhí)行VBScript的函數(shù)。所以說是一個(gè)雜交的函數(shù)。感謝blueidea論壇 提供的算法。
雖然有了解決的辦法,但形式丑陋,而且不符合web標(biāo)準(zhǔn)。所以應(yīng)該在編程中盡量避免,如果是開發(fā)web應(yīng)用,應(yīng)盡量使用UTF-8編碼,或者在服務(wù)端設(shè)置正確的編碼信息。至于以上范例,有盜取其他網(wǎng)站內(nèi)容的嫌疑,更是不為提倡。
附一篇:討論:
原因:AJAX在接收responseText或responseXML的值的時(shí)候是按照UTF-8的格式來解碼的,如果服務(wù)器段發(fā)送的數(shù)據(jù)不是UTF-8的格式,那么接收responseText或responseXML的值有可能為亂碼。
解決辦法: 在服務(wù)器指定發(fā)送數(shù)據(jù)的格式:
在jsp文件中:
response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件
或是
response.setContentType("text/xml;charset=UTF-8");//返回的xml文件
PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset("GB2312")
JSP:response.setHeader("Charset","GB2312");
討論:
PHP:header('Content-Type:text/html;charset=GB2312');
這樣寫除非是小項(xiàng)目
大項(xiàng)目都是按照框架走
對于HEADER定義于config文件最前端解決方案
在JS里有一個(gè)解析utf-8xml的方法寫的非常強(qiáng)
建議用那
非物理生命 traindiy

相關(guān)文章

  • JavaScript如何控制Session實(shí)現(xiàn)原理及代碼

    JavaScript如何控制Session實(shí)現(xiàn)原理及代碼

    看到這個(gè)題目,或許有人會(huì)提出疑問,JavaScript代表客戶端,而Session代表的是服務(wù)器(不知道這樣說大家是否能夠理解)現(xiàn)在就回到了題目所描述的問題寫一個(gè)JavaScript方法,使其修改Session,感興趣的朋友可以了解下,或許本文對你學(xué)習(xí)ajax有所幫助
    2013-02-02
  • ajax內(nèi)部值外部調(diào)用不了的原因及解決方法

    ajax內(nèi)部值外部調(diào)用不了的原因及解決方法

    下面小編就為大家?guī)硪黄猘jax內(nèi)部值外部調(diào)用不了的原因及解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • 使用FormData進(jìn)行Ajax請求上傳文件的實(shí)例代碼

    使用FormData進(jìn)行Ajax請求上傳文件的實(shí)例代碼

    這篇文章主要介紹了使用FormData進(jìn)行Ajax請求上傳文件的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • 淺析IE針對Ajax請求結(jié)果的緩存問題

    淺析IE針對Ajax請求結(jié)果的緩存問題

    我們通過一個(gè)ASP.NET MVC應(yīng)用來重現(xiàn)IE針對Ajax請求結(jié)果的緩存。在一個(gè)空ASP.NET MVC應(yīng)用中我們定義了如下一個(gè)默認(rèn)的HomeController,其中包含一個(gè)返回當(dāng)前時(shí)間的Action方法GetCurrentTime。
    2015-09-09
  • 在實(shí)戰(zhàn)中可能碰到的幾種ajax請求方法詳解

    在實(shí)戰(zhàn)中可能碰到的幾種ajax請求方法詳解

    這篇文章主要給大家分享了在實(shí)戰(zhàn)中可能碰到的幾種ajax請求方法,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Jquery $.ajax函數(shù)外的一段代碼的執(zhí)行順序

    Jquery $.ajax函數(shù)外的一段代碼的執(zhí)行順序

    調(diào)用了JQuery的異步函數(shù)$.ajax ,然后在$.ajax函數(shù)外之后又有一段Jquery 代碼。每次都是在$.ajax之后的代碼先執(zhí)行
    2014-06-06
  • 甩掉ashx和asmx使用jQuery.ajaxWebService請求WebMethod簡練處理Ajax

    甩掉ashx和asmx使用jQuery.ajaxWebService請求WebMethod簡練處理Ajax

    這篇文章主要介紹了甩掉ashx和asmx使用jQuery.ajaxWebService請求WebMethod簡練處理Ajax的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • 實(shí)現(xiàn)AJAX異步調(diào)用和局部刷新的基本步驟

    實(shí)現(xiàn)AJAX異步調(diào)用和局部刷新的基本步驟

    AJAX?可以在不重新加載整個(gè)網(wǎng)頁的情況下,與服務(wù)器交換數(shù)據(jù),并且更新部分網(wǎng)頁,下面這篇文章主要給大家介紹了關(guān)于實(shí)現(xiàn)AJAX異步調(diào)用和局部刷新的基本步驟,需要的朋友可以參考下
    2022-03-03
  • Ajax常用封裝庫——Axios的使用

    Ajax常用封裝庫——Axios的使用

    這篇文章主要介紹了Ajax常用封裝庫——Axios的使用,幫助大家更好的理解和學(xué)習(xí)網(wǎng)絡(luò)編程,感興趣的朋友可以了解下
    2021-05-05
  • AjaxSubmit()提交file文件

    AjaxSubmit()提交file文件

    這篇文章主要介紹了AjaxSubmit()提交file文件的實(shí)例講解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02

最新評論

长丰县| 绥化市| 石家庄市| 黎平县| 正安县| 岢岚县| 中方县| 临海市| 孟村| 泰和县| 永平县| 鄂托克前旗| 忻城县| 肇源县| 凤凰县| 南丹县| 潞西市| 策勒县| 阿瓦提县| 安西县| 芒康县| 普定县| 广安市| 西乡县| 周至县| 美姑县| 广水市| 沙洋县| 霍邱县| 额尔古纳市| 宜都市| 亚东县| 泌阳县| 蚌埠市| 靖远县| 正宁县| 竹山县| 鄂托克前旗| 陇南市| 民权县| 格尔木市|