`
rocket
  • 浏览: 92437 次
  • 性别: Icon_minigender_1
  • 来自: 金城
社区版块
存档分类
最新评论

最近估计是和utf-8干上了,今天又搞定一个ajax的编码问题

阅读更多
今天开始试用ajax最为项目的辅助,本来开始很顺利,测试的内容也比较简单
先在一个jsp中加入ajax的引擎
//ajax 引擎
    <script language="javascript">
    var http_request 
= false;
    var currentPos 
= null;
    function send_request(url) 
{//初始化、指定处理函数、发送请求的函数
        http_request = false;
        
//开始初始化XMLHttpRequest对象
        if(window.XMLHttpRequest) //Mozilla 浏览器
            http_request = new XMLHttpRequest();
            
if (http_request.overrideMimeType) {//设置MiME类别
                http_request.overrideMimeType('text/xml');
            }

        }

        
else if (window.ActiveXObject) // IE浏览器
            try {
                http_request 
= new ActiveXObject("Msxml2.XMLHTTP");
            }
 catch (e) {
                
try {
                    http_request 
= new ActiveXObject("Microsoft.XMLHTTP");
                }
 catch (e) {}
            }

        }

        
if (!http_request) // 异常,创建对象实例失败
            window.alert("不能创建XMLHttpRequest对象实例.");
            
return false;
        }

        
        http_request.onreadystatechange 
= processRequest;
        
// 确定发送请求的方式和URL以及是否同步执行下段代码
        
        http_request.open(
"POST", url, true);
        http_request.setRequestHeader(
"Content-Type","application/x-www-form-urlencoded");
            
        http_request.send(
null);
    }

    
// 处理返回信息的函数
    function processRequest() {
        
if (http_request.readyState == 4// 判断对象状态
             
            
if (http_request.status == 200// 信息已经成功返回,开始处理信息
                
                                
                document.getElementById(currentPos).innerHTML 
= http_request.responseText;
            }
 else //页面不正常
                alert("http_request.status exception code:"+http_request.status);
            }

        }

    }
</script>

然后在jsp中做个测试的select,和用于显示ajax的回传数据的区域
<table width="200" border="0" cellspacing="0" cellpadding="0">
    
<tr>
        
<td height="20"><select name="ajaxtest" size="1" onchange="showRoles('test1');">
        
<option selected="selected" value="test1" >test1option>
        
<option value="test2" >test2option>
        
<option value="test3" >test3option>
        
<option value="test4" >test4option>
        
select>td>
    
tr>
    
<tr style="display:none">
        
<td height="20" id="test1">&nbsp;td>
    
tr>
 
再写一个js用了作为事件的触发
<script language="javascript">
        
    
//显示部门下的岗位
    function showRoles(obj) {
        document.getElementById(obj).parentNode.style.display 
= "";
        document.getElementById(obj).innerHTML 
= "loading"
        currentPos 
= obj;
        
        send_request(
"http://localhost/oa-web/app/test/sample2_2.jsp?playPos="+obj);
    }
 再另外写一个资源jsp,用于读取资源回来

<!---->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!---->
两个jsp的编码都是utf-8的,但是在测试时发现回传回来的responseText都是乱码
去google上找,原来http_request 这个对象在request和response都是以gb2312进行的,需要更改编码
但是可恶的是javascript没有提供更改http_request 编码的方法于是在网上找了一个vbscript的函数
<SCRIPT LANGUAGE="vbScript"> 
 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 
SCRIPT> 
然后对回传回来的http_request 进行一下编码更改
    // 处理返回信息的函数
    function processRequest() {
        
if (http_request.readyState == 4// 判断对象状态
             
            
if (http_request.status == 200// 信息已经成功返回,开始处理信息
                
                URLEncoding(http_request.responseBody);
                
                document.getElementById(currentPos).innerHTML 
= http_request.responseText;
            }
 else //页面不正常
                alert("http_request.status exception code:"+http_request.status);
            }

        }

    }
最终终于可以正常显示中文了
这两天和编码的纠缠有一个深刻的体会:做中国人难啊,要是计算机是中国人发明的多好:)
注:这种方法只在IE上试验过,别的浏览器还没有试
分享到:
评论
1 楼 boz.lee 2009-01-16  
good job

相关推荐

    js实现GBK编码,避免默认utf-8编码

    前端页面通过ajax发送请求,参数都是默认使用utf-8编码格式对参数进行url编码,这样的后果就是,当后台页面如果使用gbk编码的话,会出现乱码的情况,然后网上找到一个大神写的gbk.js. 但是里面没有做出详细介绍,这里...

    ueditor-1.4.3.3 jsp版本源码(UTF-8)

    其1.4.3.3版本的JSP源码提供了一个完善的开发框架,支持UTF-8编码,对于Java开发者来说,这是一份极具价值的学习资源和开发工具。 1. **ueditor简介** ueditor是百度公司推出的一款开源的JavaScript富文本编辑器,...

    Web开发关于UTF-8的问题总结.docx

    在Web开发中,UTF-8编码是一个至关重要的概念,它是一种广泛使用的字符编码标准,能够支持全球大部分语言的字符表示。以下是对Web开发中遇到的UTF-8问题的详细总结: 1. HTML页面转UTF-8编码问题: - 在HTML文件的...

    字符集处理方案 GBK UTF-8

    字符集处理方案主要涉及到字符编码的转换和一致性问题,尤其在GBK和UTF-8之间。GBK是中国大陆广泛使用的汉字编码标准,它包含了GB2312的所有字符,并且增加了许多其他字符,支持更多的汉字和符号。UTF-8是一种...

    utf8-jsp.zip

    UTF8-JSP(Unicode Transformation Format - 8 bit,UTF-8)是JSP页面常用的字符编码方式,它能够支持世界上几乎所有的文字系统,确保了不同语言环境下的正确显示。本篇文章将重点探讨UTF8-JSP的原理、优势及在实际...

    ASP源码—ajax n级联动数据库版(带后台和省市县数据库) utf-8.zip

    综上所述,这个压缩包提供的是一套完整的基于ASP的Web应用,它利用AJAX技术实现了多级联动的地区选择功能,同时包含一个数据库来存储地区信息,所有内容都采用UTF-8编码,确保全球用户的兼容性。开发者可以通过学习...

    ueditor编辑器utf8-net 富文本编辑器

    【ueditor编辑器utf8-net 富文本编辑器】是一个专为.NET平台设计的富文本编辑器组件,它集成了UTF-8编码支持,能够提供丰富的文本格式化、图片上传、表格编辑、链接插入等功能,使得开发者在构建Web应用程序时可以...

    基于PHP的留言帖吧utf-8.zip

    4. **UTF-8编码**:UTF-8是一种Unicode编码方式,支持世界上几乎所有字符,包括中文、日文、韩文等多语言环境。在PHP中,使用header()函数可以设置HTTP响应头来指定页面的编码,如`header("Content-Type: text/html;...

    ajax n级联动数据库版(带后台和省市县数据库) v1.0.0 utf-8-ASP源码.zip

    "ajax n级联动数据库版(带后台和省市县数据库) v1.0.0 utf-8-ASP源码.zip" 这个标题揭示了几个关键知识点: 1. **AJAX (Asynchronous JavaScript and XML)**:这是一种在无需刷新整个网页的情况下,能够更新部分...

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

    本问题涉及的是一个具体的情景,即UTF-8编码的客户端通过AJAX方式从GB2312编码的服务器端获取数据时遇到的乱码问题。UTF-8是一种广泛采用的Unicode字符编码标准,而GB2312是中国大陆早期的简体中文编码标准,这两种...

    AJAX编码问题

    ### AJAX编码问题详解 在开发基于Web的应用程序时,AJAX技术因其能够实现网页局部刷新、提高用户体验等特性而被广泛采用。然而,在实际应用中,开发者常常会遇到AJAX请求中的编码问题,特别是POST方式提交数据时...

    源代码-ajax n级联动数据库版(带后台和省市县数据库) utf-8.zip

    该压缩包文件“源代码-ajax n级联动数据库版(带后台和省市县数据库) utf-8.zip”包含了一个基于ASP技术实现的多级联动选择功能的源代码,主要用于处理省市县(或者地区)的层级数据。这个功能在很多网站中都有应用,...

    asp UTF-8 乱码问题的解决方法小结

    ASP页面UTF-8编码乱码问题的解决方法涉及到字符编码的知识点,主要需要理解以下几个方面: 1. 字符编码基础知识 字符编码是用于文本数据转换为另一种格式的标准。不同的编码方式用于不同的语言环境,解决乱码问题的...

    dataviewUTF-8:从ArrayBuffer到utf-8字符串的Javascript编码方法

    数据视图UTF-8 用于将ArrayBuffer转换为utf-8字符串的Javascript方法如何使用? 您将必须在项目中添加utf8.js文件。 我假设您已经从websocket或ajax输入了缓冲区var dataview = new DataView(buffer); dataview....

    ajax课件--------Ajax.ppt

    如果发送的数据为 BSTR,则回应被编码为 utf-8,必须在适当位置设置一个包含 charset 的文档类型头。 readyState 属性 readyState 属性返回请求执行的状态,共有五个状态:0(未初始化)、1(初始化)、2(请求...

    Ajax中文乱码问题解决方案

    1. **统一编码格式**:确保服务器和客户端都使用相同的字符编码,如UTF-8,这是目前最广泛支持的编码格式。可以在服务器端的响应头中设置`Content-Type: text/plain; charset=UTF-8`,确保返回的响应是以UTF-8编码的...

    ueditor1_4_3_1-utf8-jsp.zip

    UTF-8是一种流行的Unicode编码方式,几乎包含了世界上所有语言的字符,使得ueditor1_4_3_1在国际化的停车场管理系统中具有广泛的应用前景。 在ueditor1_4_3_1中,“jsp”代表JavaServer Pages,这是一种基于Java的...

    PHP实例开发源码——Discuz! UTF-8简体中文版.zip

    UTF-8是一种多字节字符编码,能够表示Unicode字符集中的所有字符。在Discuz! 中,使用UTF-8编码确保了对中文字符的正确显示,同时兼容其他语言,满足全球化的需求。 3. MySQL数据库: MySQL是Discuz! 存储数据的...

Global site tag (gtag.js) - Google Analytics