700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法【javascript】

关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法【javascript】

时间:2023-03-11 02:10:31

相关推荐

关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法【javascript】

web前端|js教程

客户端,AJAX,GB2312,乱码

web前端-js教程

客户端是UTF-8编码,这也是现在大家公认的标准编码

在这种情况下,实用AJAX异步获取GB2312编码的服务器端信息时,不可避免的要遇到汉字乱码问题

因为目标数据是GB2312,但XMLHttpRequest默认是用UTF-8来进行数据封装的,因此会产生乱码

相信很多人都在用轻量级的JS工具集-prototype.js,它的AJAX功能同样很出色

我也一直在用它,因此对于这个问题也一直是基于 prototype.js来考虑的

但经过多次试验,还是没能把它返回的 responseText 转成正确的编码格式

后来了解到,在XMLHttpRequest对象的 responseBody 属性中,保存了原始的数据信息

但prototype.js的AJAX功能返回的 responseBody 属性是 undefined,看来还是要自己动手了

经过近一个小时的敲打,一个短小精悍的AJAX框架腾空出世了,哈哈,不过功能还是很全的

里面某些写法借鉴了另一个轻量级的AJAX框架-bingo.js的实现方式

调用方式及注释:

jfinal demo案例源码,在线vscode debug,ubuntu sdl,idea如何启动tomcat,安卓SQLITe使用,网页设计笔记本推荐,数据库配置文件在哪里,免费服务器建立网站,xt插件,h ui 前端框架 时间,c爬虫代码,for循环 php,新seo,springboot常见报错,科讯系统函数标签 sql语句,h5响应式网站源码下载,网页音频播放器 js,微盟发送模板消息,zencart后台密码忘记,jquery mobile 滑动切换页面,人员进出管理系统源码,神经网络matlab程序lzw

myAjaxCall({

url : xxxxx.jsp //目标页面地址

,params : URLEncoding(prm1=参数1&prm2=参数2) //参数串信息

,method : POST //发送方式POST or GET

,callBack : retValue //回调函数名称

,isBody : true //是否返回 responseBody ,默认返回 responseText

//,isXml : false //是否以XML格式返回数据

//,errorReport : false //发送错误时,是否弹出提示

//,attachs : {} //附加的其他参数,可传递给回调函数

});

function retValue(res,att){

var strRet = bytes2BSTR(res);

alert(strRet);

}

注意看其中的两个函数:

asp红包源码,vscode官方,ubuntu和unity,自制tomcat,sqlite 脚本大小,服务器如何配置php apache,bootstarp日历插件,前端开发框架的,网络爬虫 分类,php容易学吗,孤藤seo,源码网站运营,网页透明层,行业新闻模板,仿ios页面切换按钮,学籍管理系统 源代码,access 身体程序 很强大lzw

、URLEncoding :对参数进行编码

、bytes2BSTR :对返回的数据进行解码

屏幕录像专家注册机易语言源码,ubuntu网卡改百兆,Python 爬虫知识框架,php培训php自学要多久,山南seo技术lzw

这两个函数直接借鉴了网络上很流行的两个编码函数,不过都是用vbs写的

需要把这两个函数也附加到上面的页面里:

Function URLEncoding(vstrIn)

strReturn = ""

For i = 1 To Len(vstrIn)

ThisChr = Mid(vStrIn,i,1)

If Abs(Asc(ThisChr)) < &HFF Then

strReturn = strReturn & ThisChr

Else

innerCode = Asc(ThisChr)

If innerCode < 0 Then

innerCode = innerCode + &H10000

End If

Hight8 = (innerCode And &HFF00) \ &HFF

Low8 = innerCode And &HFF

strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)

End If

Next

URLEncoding = strReturn

End Function

Function bytes2BSTR(vIn)

strReturn = ""

For i = 1 To LenB(vIn)

ThisCharCode = AscB(MidB(vIn,i,1))

If ThisCharCode < &H80 Then

strReturn = strReturn & Chr(ThisCharCode)

Else

NextCharCode = AscB(MidB(vIn,i+1,1))

strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))

i = i + 1

End If

Next

bytes2BSTR = strReturn

End Function

下面附上我写的轻量级Ajax框架 – myAjax.js 源码:

/**

2 * myAjax

3 * by netwild

4 * netwild@

5 */

6 var myAjaxConfig = {

7 "url":""

8 ,"params":""

9 ,"method":"GET"

,"callBack":function(){}

,"isXml":false

,"isBody":false

,"isCache":false

,"errorReport":true

,"statePoll":null

,"postData":null

,"attachs":{}

};

function myAjaxCall(requestJson){

var attach;

if(requestJson && typeof requestJson == "object"){

if(requestJson.url){myAjaxConfig.url = requestJson.url;}

if(requestJson.params){myAjaxConfig.params = requestJson.params;}

if(requestJson.method){myAjaxConfig.method = requestJson.method;}

if(requestJson.callBack){myAjaxConfig.callBack = requestJson.callBack;}

if(requestJson.isXml){myAjaxConfig.isXml = requestJson.isXml;}

if(requestJson.isBody){myAjaxConfig.isBody = requestJson.isBody;}

if(requestJson.isCache){myAjaxConfig.isCache = requestJson.isCache;}

if(requestJson.statePoll){myAjaxConfig.statePoll = requestJson.statePoll;}

if(requestJson.attachs){myAjaxConfig.attachs = requestJson.attachs;}

}

if(!myAjaxConfig.isCache){

var nocache = new Date().getTime();

if(myAjaxConfig.url.indexOf("?")>0){myAjaxConfig.url += "&nocache=" + nocache;}

else{myAjaxConfig.url += "?nocache=" + nocache;}

}

var newCall = new myAjaxCore();

newCall.init();

}

function myAjaxCore(){

var _self = this;

var _state,_status;

var _httpRequest,_attach;

////////////////////////////////////////////////////

this.init = function(){

if (window.XMLHttpRequest){

_httpRequest = new XMLHttpRequest();

if (_httpRequest.overrideMimeType) {

_httpRequest.overrideMimeType( ext/xml);

}

}else if (window.ActiveXObject) {

var MSXML = [MSXML2.XMLHTTP.6.0,MSXML2.XMLHTTP.3.0,MSXML2.XMLHTTP.5.0,MSXML2.XMLHTTP.4.0,MSXML2.XMLHTTP, Microsoft.XMLHTTP];

for(var n=0;n<MSXML.length;n++){

try {

_httpRequest = new ActiveXObject(MSXML[n]);

break;

}catch(e){}

}

}

with(_httpRequest) {

onreadystatechange = _self.getResponse;

open(myAjaxConfig.method,myAjaxConfig.url,true);

if(myAjaxConfig.method == "POST" && (myAjaxConfig.params != "")){

setRequestHeader("Content-Length",myAjaxConfig.params.length);

setRequestHeader("Content-Type","application/x-www-form-urlencoded");

send(myAjaxConfig.params);

}else{

var textType = myAjaxConfig.isXml?"text/xml":"text/plain";

_httpRequest.setRequestHeader(Content-Type,textType);

if(browser.IE){

setRequestHeader("Accept-Encoding", "gzip, deflate");

}else if(browser.FF){

setRequestHeader("Connection","close");

}

send(null);

}

}

};

////////////////////////////////////////////////////

this.getResponse = function(){

_state = _httpRequest.readyState;

if(_httpRequest.readyState == 4 && _httpRequest.status){_status = _httpRequest.status;}

if(myAjaxConfig.statePoll){myAjaxConfig.statePoll(_httpRequest.readyState);}

if(_httpRequest.readyState==4 && _httpRequest.status>=400){

_self.abort();

_self.alertf("ERROR:HTTP response code "+_httpRequest.status);

}

if(_httpRequest.readyState==4 && _httpRequest.status==200){

var response_content;

if(myAjaxConfig.isXML){

response_content = _httpRequest.responseXML;

}else if(myAjaxConfig.isBody){

response_content = _httpRequest.responseBody;

}else{

response_content = _httpRequest.responseText;

}

if(typeof myAjaxConfig.callBack == "function"){

myAjaxConfig.callBack(response_content,myAjaxConfig.attachs);

}else{

eval(myAjaxConfig.callBack+"(response_content,myAjaxConfig.attachs)");

}

}

};

////////////////////////////////////////////////////

this.abort=function(){_httpRequest.abort();};

this.state=function(){return _state;};

this.status=function(){return _status;};

this.destory=function(){_self.abort();delete(_httpRequest);};

this.alertf=function(error){if(myAjaxConfig.errorReport){alert(error);}};

}

if(!browser){

var browser={};

browser.IE = browser.ie = window.navigator.userAgent.indexOf("MSIE")>0;

browser.Firefox = browser.firefox = browser.FF = browser.MF = navigator.userAgent.indexOf("Firefox")>0;

browser.Gecko = browser.gecko = navigator.userAgent.indexOf("Gecko")>0;

browser.Safari = browser.safari=navigator.userAgent.indexOf("Safari")>0;

browser.Camino = browser.camino=navigator.userAgent.indexOf("Camino")>0;

browser.Opera = browser.opera=navigator.userAgent.indexOf("Opera")>0;

browser.other = browser.OT=!(browser.IE || browser.FF || browser.Safari || browser.Camino || browser.Opera);

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。