vbscript/javascript结合搞定ajax中文乱码问题。

简介: XMLHTTPREQUEST的数据传输采用utf8编码(老外搞的东西,对中文支持就是差)。如果我们ajax访问的服务器也是自己编写,那么我们可以把服务器设置为utf8那么问题不大,但如果服务器是别人写好的,采用的是gb2312怎么办呢?我找了半天,结合javascript和vbscript终于搞定了。
XMLHTTPREQUEST的数据传输采用utf8编码(老外搞的东西,对中文支持就是差)。如果我们ajax访问的服务器也是自己编写,那么我们可以把服务器设置为utf8那么问题不大,但如果服务器是别人写好的,采用的是gb2312怎么办呢?我找了半天,结合javascript和vbscript终于搞定了。
vbscript代码如下:
  1. 'Input:要转为gb2312的字符串(utf8)
  2. 'Output:GB2312码
    '###################################
    Function convertstr(vIn)
     strReturn = ""
     For i = 1 To LenB(vIn)
             ThisCharCode = AscB(MidB(vIn,i,1))
             If ThisCharCode                  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
     convertstr = strReturn
    End Function

javascript发送ajax请求

 

  1. script type="text/javascript">
  2. var http_request = false;
  3. /**
  4.  * 功能:查询辽宁软考的准考证信息
  5.  * 参数:输入准考证号
  6.  * 返回:准考证信息页面
  7.  */
  8. function send_request() { //初始化、指定处理函数、发送请求的函数

  9.     var url=""; //要调用的连接

  10.     if (window.XMLHttpRequest) { //Mozilla 浏览器

  11.             http_request = new XMLHttpRequest();
  12.             if (http_request.overrideMimeType) { //设置MiME类别

  13.                     http_request.overrideMimeType("text/html"); //设定以gb2312编码识别数据

  14.             }
  15.     } else if (window.ActiveXObject) { // IE浏览器

  16.             try {
  17.                     http_request = new ActiveXObject("Msxml2.XMLHTTP");
  18.             } catch(e) {
  19.                     try {
  20.                             http_request = new ActiveXObject("Microsoft.XMLHTTP");
  21.                     } catch(e) {}
  22.             }
  23.     }
  24.     if (!http_request) { // 异常,创建对象实例失败

  25.             window.alert("不能创建XMLHttpRequest对象实例.");
  26.             return false;
  27.     }
  28.     http_request.onreadystatechange = function() {
  29.             if (http_request.readyState == 4) { // 判断对象状态

  30.                     if (http_request.status == 200) { // 信息已经成功返回,开始处理信息

  31.                             gb2utf8_data = http_request.responseBody;
  32.                             execScript("gb2utf8_data = convertstr(gb2utf8_data)", "VBScript"); //javascript调用vbscript代码的方法
  33.                             var resText = gb2utf8_data; //中文信息

  34.                             var namepos = resText.indexOf('姓名');
  35.                             var zkzhpos = resText.indexOf("准考证号");
  36.                             var name = "姓名:" + resText.substr(namepos + 36,3)
  37.                             name=name.replace(","");
  38.                             var zkzh = "准考证号:" + resText.substr(zkzhpos + 38,12);
  39.                             if (document.getElementById("result").innerHTML == "") {
  40.                                 document.getElementById("result").innerHTML = name + "," + zkzh;
  41.                             }else{
  42.                                 document.getElementById("result").innerHTML = document.getElementById("result").innerHTML +
  43.                                              "
    "
    + name + "," + zkzh;
  44.                             }
  45.                             //document.getElementById("result").innerHTML =gb2utf8_data;

  46.                             //alert(bytes2BSTR(http_request.responseBody));

  47.                     } else { //页面不正常

  48.                             document.getElementById("result").innerHTML = "发生错误!访问超时!"
  49.                     }
  50.             }
  51.     }
  52.     http_request.open("POST", url, true);
  53.     http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //这句话必须加,否则数据过不去
  54.     http_request.send("name=value"); //post表单数据
  55. } 
  56. /script>
通过上面的设置基本可以搞定ajax的gb2312中文乱码了。
目录
相关文章
|
6月前
|
JavaScript 前端开发 容器
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
59 0
|
6月前
|
前端开发 JavaScript
js + ajax实现商品列表页到详情页的跳转
js + ajax实现商品列表页到详情页的跳转
|
2月前
|
移动开发 前端开发 JavaScript
js之ajax |12-6
js之ajax |12-6
|
4月前
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第3天】前端开发中的异步基石:AJAX与Fetch。AJAX,使用XMLHttpRequest,处理跨域、回调地狱和错误处理。Fetch,基于Promise,简化请求,但需注意默认无跨域头和HTTP错误处理。两者各有优劣,理解其问题与解决策略,能提升前端应用的性能和用户体验。
136 24
|
3月前
|
JavaScript 前端开发 网络协议
|
3月前
|
JavaScript 前端开发 安全
js之AJAX
js之AJAX
31 0
|
5月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
4月前
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第9天】JavaScript进阶:AJAX与Fetch API对比。AJAX用于异步数据交换,XMLHttpRequest API复杂,依赖回调。Fetch API是现代、基于Promise的解决方案,简化请求处理。示例:`fetch('url').then(r => r.json()).then(data => console.log(data)).catch(err => console.error(err))`。注意点包括检查HTTP状态、错误处理、CORS、Cookie和超时。Fetch提高了异步代码的可读性,但需留意潜在问题。
96 0
|
4月前
|
前端开发 JavaScript API
js【详解】ajax (含XMLHttpRequest、 同源策略、跨域、JSONP)
js【详解】ajax (含XMLHttpRequest、 同源策略、跨域、JSONP)
51 0
|
5月前
|
XML 移动开发 前端开发
JS设置Ajax为同步或异步
JS设置Ajax为同步或异步
65 0