今天开始试用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"> 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上试验过,别的浏览器还没有试
先在一个jsp中加入ajax的引擎











































































</script>
然后在jsp中做个测试的select,和用于显示ajax的回传数据的区域






























去google上找,原来http_request 这个对象在request和response都是以gb2312进行的,需要更改编码
但是可恶的是javascript没有提供更改http_request 编码的方法于是在网上找了一个vbscript的函数










































这两天和编码的纠缠有一个深刻的体会:做中国人难啊,要是计算机是中国人发明的多好:)
注:这种方法只在IE上试验过,别的浏览器还没有试