rocket
走在agile的小路上
BlogJava
首页
新随笔
联系
聚合
管理
随笔-55 评论-208 文章-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
阅读(1480)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
Dict.CN 在线词典, 英语学习, 在线翻译
QQ:19794405
agilelife分享群:59765983
QQ上少了,请大家加入msn group:
agilelife@groups.msn.com
敏捷项目实践经验分享
TDD,重构,迭代,结对
<
2006年4月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(7)
给我留言
查看公开留言
查看私人留言
我参与的团队
深圳Java俱乐部(0/0)
随笔分类
(15)
UI相关
好文翻译(1)
常用框架(1)
敏捷方法(4)
数据库相关
构架设计(2)
经验积累(3)
项目管理(4)
随笔档案
(55)
2008年12月 (1)
2008年7月 (2)
2008年5月 (8)
2008年3月 (1)
2008年2月 (4)
2007年10月 (1)
2007年9月 (4)
2007年7月 (3)
2007年5月 (2)
2007年4月 (6)
2007年3月 (5)
2007年2月 (2)
2007年1月 (3)
2006年11月 (3)
2006年10月 (1)
2006年8月 (1)
2006年7月 (1)
2006年5月 (2)
2006年4月 (2)
2006年3月 (3)
相册
rocket
搜索
积分与排名
积分 - 132659
排名 - 464
最新评论
1. re: 找了一天的jsp格式化工具,最后还是用回workshop
nb@2
--3
2. re: 一个以前没有注意的问题:java构造函数的执行顺序
不错,很有帮助
--王鹏飞
3. re: 一个新java web项目入手过程总结
标记一下。
--何杨
4. re: 单元测试究竟是测试什么?[未登录]
单元测试是在测逻辑,包括条件判定,循环等。博主的这段代码不包括任何逻辑,当然不需要用单元测试去覆盖。
--王辉
5. re: 找了一天的jsp格式化工具,最后还是用回workshop
傻逼
--2
阅读排行榜
1. 一个新java web项目入手过程总结(8491)
2. 一个以前没有注意的问题:java构造函数的执行顺序(8185)
3. 找了一天的jsp格式化工具,最后还是用回workshop(7367)
4. dwr reverse-ajax 实例解析(6588)
5. Spring+hibernate 单元测试框架总结(6224)
评论排行榜
1. 不仁义,不仗义(24)
2. 招聘java程序员,系统架构师(20)
3. dwr reverse-ajax 实例解析(11)
4. 找了一天的jsp格式化工具,最后还是用回workshop(10)
5. 单元测试究竟是测试什么?(10)