首页
|
编程语言
|
网站建设
|
游戏天堂
|
冲浪宝典
|
网络安全
|
操作系统
|
软件时空
|
硬件指南
|
病毒相关
|
IT 认证
软讯网络
>
编程语言
>
Java
> 最近估计是和utf-8干上了,今天又搞定一个ajax的编码问题
【标 题】:最近估计是和utf-8干上了,今天又搞定一个ajax的编码问题
【关键字】:
utf-8,ajax
【来 源】:http://www.blogjava.net/rocket/archive/2006/04/13/40964.html
最近估计是和utf-8干上了,今天又搞定一个ajax的编码问题
BlogJava - rocket - 最近估计是和utf-8干上了,今天又搞定一个ajax的编码问题
rocket
BlogJava
首页
新随笔
联系
聚合
管理
随笔-5 评论-6 文章-0 trackbacks-0
最近估计是和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
"
?
>
test1
</
option
>
????????
<
option?value
=
"
test2
"
?
>
test2
</
option
>
????????
<
option?value
=
"
test3
"
?
>
test3
</
option
>
????????
<
option?value
=
"
test4
"
?
>
test4
</
option
>
????????
</
select
></
td
>
????
</
tr
>
????
<
tr?style
=
"
display:none
"
>
????????
<
td?height
=
"
20
"
?id
=
"
test1
"
>&
nbsp;
</
td
>
????
</
tr
>
?</table>
再写一个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);
????}
</script>
?再另外写一个资源jsp,用于读取资源回来
<%
@?page?language
=
"
java
"
?
import
=
"
java.util.*
"
?pageEncoding
=
"
UTF-8
"
%>
<
meta?http
-
equiv
=
"
Content-Type
"
?content
=
"
text/html;?charset=UTF-8
"
>
<%
?
String?playPos?
=
?request.getParameter(
"
playPos
"
);
if
(
"
test1
"
.equals(playPos))?out.print(
"
总经理皮总<br> 副总经理老皮
"
);
else
?
if
(
"
test2
"
.equals(playPos))?out.println(
"
总工程师<br> 软件工程师
"
);
else
?
if
(
"
test3
"
.equals(playPos))?out.println(
"
总工程师张青与<br> 软件工程师味蕾
"
);
else
?
if
(
"
test4
"
.equals(playPos))?out.println(
"
总工程师张迟斌<br> 软件工程师章鱼
"
);
%>
两个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上试验过,别的浏览器还没有试
posted on 2006-04-13 20:14
rocket
阅读(81)
评论(0)
编辑
收藏
收藏至365Key
学习使用Java DataBase (Derby) -- 嵌入式数据库
:【上一篇】
[TDD开发的全过程] 二、开发PhoneManager等类
:【下一篇】
【相关文章】
AJAX集成数据库技术 实现实时数据传输
关于workshop(原nitrox m7)的utf-8中文乱码问题解决
AJAX+PHP例子
Ajax基本知识
剖析AJAX成为“时尚”的十大主要理由
推荐一个UTF-8或者Unicode编辑的免费软件
推荐一个基于Ajax的查询API网站
基于Ajax的日期控件
UTF-8, a transformation format of ISO 10646
Using UTF-8 with Gentoo(st)
【随机文章】
Linux防入侵---snort的安装与配置
FW MX一例XP风格按钮的制作
Manually install db2 on AIX
Sybase存储过程的建立和使用
POP3协议命令原始码及工作原理
Visual Basic 中实现绘图区的大十字光标
宽字符到多字节字符转换函数
求购 旧家具 二手家具 广州
C# Regular Expressions
防火墙日志记录让蠕虫病毒无处可逃
【相关评论】
没有相关评论
【发表评论】
姓名:
邮件:
随机码
*
:
评论
*
:
|
首 页
|
版权声明
| 联系我们
|
网站地图
|
CopyRight © 2004-2007
b
b
b
软讯网络 All Rigths Reserved.