JS调用AJAX时Get和Post请求乱码解决方法

作者:清欢时间:2026-10-27 10:59:30浏览:140

本文详细解析在使用JS调用AJAX进行Get和Post请求时出现中文乱码的解决方案。针对Get请求,重点介绍服务端Servlet设置UTF-8编码及客户端HTTP响应头控制缓存与字符集的方法。针对Post请求,提供了一套完整的VBScript编码与解码函数实现,通过手动处理字符ASCII码与Hex转换,确保中文字符在传输和接收过程中保持正确显示,适用于传统IE环境下的XMLHttpRequest调用。

Get请求乱码解决:服务端与客户端编码设置

在使用Get方式发起请求时,为确保页面正确显示,需在抓取页面的最后明确指定编码类型。


具体实现代码如下:

 
<% 
服务器端配置:servletactioncontext.getresponse().setcharacterencoding("utf-8");
客户端网页特效p/jsp.html target=_blank >jsp教程: <%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%>
response.expires = -9999
response.addheader "pragma","no-cache"
response.addheader "cache-ctrol","no-cache"
response.addheader "content-type","text/html; charset=gb2312"'这是重点,否则会出现乱码
response.write "中文汉字"%>

Post请求乱码解决:VBScript编码与解码实现

2、在使用post时用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
function bytes2bstr(vin)
strreturn = ""
for i = 1 to lenb(vin)
thischarcode = ascb(midb(vin,i,1))
if thischarcode < &h80 then
strreturn = strreturn & chr(thischarcode)
else
nextcharcode = ascb(midb(vin,i+1,1))
strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
i = i + 1
end if
next
bytes2bstr = strreturn
end function
</script>

下面是使用vbscript函数:


代码如下:

 
<script language=网页特效>
/** 
* 初始化一个xmlhttp对象
*/ 
function initajax()
{ 
var ajax=false;
try {
ajax = new activexobject("msxml2.xmlhttp");
} catch (e) {
try {
ajax = new activexobject("microsoft.xmlhttp");
} catch (e) {
ajax = false;
} 
} 
if (!ajax && typeof xmlhttprequest!='undefined') {
ajax = new xmlhttprequest();
} 
return ajax;
} 
function saveuserinfo()
{ 
var msg = document.getelementbyid("msg");
var f = document.user_info;
var username = f.user_name.value;
var userage = f.user_age.value;
var usersex = f.user_sex.value;
var url = "save.asp教程";
var poststr = urlencoding("user_name="+ username +"&user_age="+ userage +"&user_sex="+ usersex);//post时采用编码传递
var ajax = initajax();
ajax.open("post", url, true);
ajax.setrequestheader("content-type","application/x-www-form-urlencoded");
ajax.send(poststr);
ajax.onreadystatechange = function() {
if (ajax.readystate == 4 && ajax.status == 200) {
msg.innerhtml = bytes2bstr(ajax.responsebody); //获取时解码
} 
} 
} 
</script>
<form name="user_info">
姓名:<textarea name="user_name" /></textarea><br />
年龄:<input type="text" name="user_age" /><br />
性别:<input type="text" name="user_sex" /><br />
<input type="button" value="提交表单" onclick="saveuserinfo()">
</form>
<div id="msg"></div>
成功
作者最新文章