关于AJAX缓存和中文乱码的解决方案
今天使用ajax做个东西.每次提交后都显示以前的代码.初步分析是缓存的问题.那么我们就需要针对缓存做一些工作.同时解决中文乱码问题(从服务器端返回中文字符到客户端的方案解决).
我使用 zXmlHttp 创建XMLHttpRequest实例 请自行导入这个脚本或者自己创建XMLHttpRequest实例
前端脚本 test.html
<script type="text/javascript">
function dealKejian(testid) {
//创建XMLHttpRequest实例
var oXmlHttp = zXmlHttp.createRequest();
oXmlHttp.open("get", "test.asp?now="
+ new Date().getTime()
+"&testid="+testid, true);
//设置不记录缓存
oXmlHttp.setRequestHeader("Cache-Control","no-cache");
oXmlHttp.onreadystatechange = function () {
if (oXmlHttp.readyState == 4) {
if (oXmlHttp.status == 200) {
displaydiv(oXmlHttp.responseText);
} else {
displaydiv(" 发生错误.请刷新页面重试 " ); //statusText is not always accurate
}
}
};
//同样是针对缓存的
oXmlHttp.setRequestHeader("If-Modified-Since","0");
oXmlHttp.send(null);
}
function displaydiv(sText) {
var displaydiv = document.getElementById("displaydiv");
//解码Unicode字符.还原成中文
displaydiv.innerHTML =
unescape(sText.replace(//g,'%u').replace(/;/g,''));
}
</script>
<div id="displaydiv">
</div>
服务器端 test.asp
<%Response.CodePage=936%>
<%
Response.ContentType = "text/html"
Response.Charset="gb2312"
Response.Buffer =True
Response.ExpiresAbsolute =Now() - 1
Response.Expires=0
Response.CacheControl="no-cache"
'将中文字符转变为 Unicode传递.这样不会出现乱码.到客户端再有 Javascript脚本解码
Response.write escape("中文字符")&request("testid")
%>
我的注释写的已经差不多清楚了.从服务器返回的中文字符会出现乱码.我们将中文字符转化为Unicode 然后到了前端再转化回来.那么这样如果我们想服务端传递中文字符.也可以先将中文字符转为Unicode到了服务端在解码. 具体的方法我就不写了.baidu和Google有很多这样的类似的代码.
其实我想最好中文解决方案是文档存储为utf-8格式.所以的传值都使用utf-8 包括meta标记


mercy :
Wrote on 2008年03月10日 @ 23:44 pm
看不懂,你的毕业论文中的片段?
KF.咖啡:不是,是一个项目的代码.
KF.咖啡 :
Wrote on 2008年04月30日 @ 00:18 am
发现可以通过加时间戳或者随机数使缓存失效,只要url不一样js就会重新读取
xiao cui :
Wrote on 2008年05月23日 @ 11:30 am
本文内容不错,对初学者有很大帮助