关于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标记

标签:, ,

« 论文要开始写了 升级到7.10 »

3条评论 So Far »

  1. mercy :

    Wrote on 2008年03月10日 @ 23:44 pm

    看不懂,你的毕业论文中的片段?

    KF.咖啡:不是,是一个项目的代码.

  2. KF.咖啡 :

    Wrote on 2008年04月30日 @ 00:18 am

    发现可以通过加时间戳或者随机数使缓存失效,只要url不一样js就会重新读取

  3. xiao cui :

    Wrote on 2008年05月23日 @ 11:30 am

    本文内容不错,对初学者有很大帮助

Comment RSS · TrackBack URI

Leave a Comment

名称: [必填(Required)][让我知道你是谁]

E-mail:[不公开] [必填(Required)][怎样联系你]

网址:[也让我看看你的家]

评论内容: