开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Ajax中异步处理时中文乱码解决方案

简介:
+关注继续查看

前段在做Ajax异步处理时传参时遇到中文乱码问题,想起以前在用WebServerce 做服务时也碰到这样的问题,当时通过异步请求向WebService中传参,而Ajax中对中文支持不是太好,编码格式导致 出现了乱码,这个问题很长见,也尝试几种处理方法,今天加以小结.

(1)分析Ajax出现中文乱码原因:

XmlHttpRequest对象responseXML属性来完成异步请求的响应回传,能够触发这个动作的条件是响应头部的Content-Type 的MiME类型必须被指定为XML(text/XMl或者application/Xml),当前这个属性才会有值并且会被解析成一个XML文档 返回到客户端。一般情况下XMl默认为UTF-8的编码格式(还有其他具体分类)。

中文乱码产生:

XMlHttpRequest异步请求时向服务器端发送数据的编码格式是Unicode格式,

请求响应到客户端而是XML文档 默认编码格式是UTF-8格式

如果你的页面编码本来就是UTF-8,中文乱码就不会出现,而大部分的情况下一般页面设置是GB2312格式,这样转译格式发生了变化 导致乱码产生.而这种乱码出现方式分为两种,第一是页面显示的是乱码,另外一个就是想服务器端传送数据时中文成乱码

(2)解决方案:

方案一:统一页面编码格式  解决页面显示成乱码问题

默认返回到客户端的是编码是UTF-8格式,那么我们工作就是修改页面编码格式即可,示例代码如下:

--统一页面编码格式
--Author:chenkai  Time:2009-6-4 11:54:34

页首Page指令中添加两个属性:
 <%@ page contentType="text/html; charset=UTF-8"%>

<Title>中设置:
  //小小的Meta 其实就是在报头请求中说明当前页面内容和编码格式
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
设置后页面显示上中文的显示时没有问题.

方案二:转换编码格式 在服务器端解决中文乱码

XmlHttpRequest通过open()方法发送请求,需要设定请求的报头:

request.open("POST","Default.aspx?Value="+value,true);
  //设置Request报头 Content-Type 
request.setRequestHeader("Content-Type","text/html;charset=gb2312");
  //设置主要目的是保证向服务器端发送数据  参的值有中文乱码问题 

参数会设定字符编码格式gb2312 默认转换,同样如果在JS中对服务器端传送数据需要使用既定Escape()和UnEscape函数来处理中文字符乱码问题: 具体使用方法如下

--Escape()函数定义及用法
--Author:chenkai  Time:2009-6-4 14:07:01
--Address:http://www.w3school.com.cn/js/jsref_escape.asp

//JS中的Escape()函数用来处理String 字符窜进行编码以使计算机能够识别可读 使用方法:

//定义:Escape(ChartSeting)  ChartSeting是必须的参数   参数是要编码的任意 String 对象或文字

<script type="text/JavaScript" lanage="javascript">
 var getstr=escape('函数测试数据!');
</script>

//Escape()函数返回的是 ChartSeting内容的字符窜Unicode格式数据,
//为什么是Unicode格式?因为在异步请求并传参是 默认格式就是Unicode 对应的汉字就能识别 

//注意:

//所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 "%20" 。字符值大于 255 的以 %uxxxx 格式存储 


本文转自chenkaiunion 51CTO博客,原文链接:http://blog.51cto.com/chenkai/765418

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
bboss mvc ajax响应输出中文乱码解决方法
对于bboss mvc ajax请求响应出现的中文乱码问题,怎么解决?解决办法有两个,一个是直接在bboss-mvc.xml中的字符串转换插件StringHttpMessageConverter上通过responseCharset属性全局指定响应字符编码集,例如UTF-8或者GBK: 具体使用何种字符集取决于项目中采用的字符集。
757 0
chrome 等浏览器不支持本地ajax请求的问题
chrome 等浏览器不支持本地ajax请求的问题   XMLHttpRequest cannot load file:///D:/WWW/angularlx/ui-router-test/template/content.
1320 0
ajax请求正常,返回json格式,后台没问题,浏览器500
1.使用的是springmvc中的 @ResponseBody 注解   ,后台不报错,。正常走完;以为使用这个注解就可以正常返回json格式的数据;所以一直没有怀疑是注解的问题;   以为是ajax本身的问题  ;后来将返回数据改为纯数字又没有问题了。
1314 0
ajax请求案例
$("#button").on("click" ,function(){//jquery的写法 alert(123); $.ajax({ url:"a/toJson.
900 0
golang模拟ajax请求
// 模拟ajax请求,author:908204694@qq.com // func Test_ajax(t *testing.T) { urlTest := "http://www.xyz.
2505 0
前台返回json数据的常用方式+常用的AJAX请求后台数据方式
我个人开发常用的如下所示: 之所以像下面这样下,一是前台Ajax,二是为安卓提供接口数据 现在常用的是返回JSON数据,XML的时代一去不复返 JSON相对于XML要轻量级的多 对JSON不是十分熟悉的可参考此网站:http://www.
913 0
服务端有异常, 导致: Ajax 请求报错 net::ERR_INCOMPLETE_CHUNKED_ENCODING
服务端有异常, 导致: Ajax 请求报错 net::ERR_INCOMPLETE_CHUNKED_ENCODING 但是,这个 Ajax Http 接口使用浏览器可以直接返回。
2161 0
【error】jQuery ajax请求错误返回status 0和错误error的问题 : ajax error:{"readyState":0,"status":0,"statusText":"error"}
【error】jQuery ajax请求错误返回status 0和错误error的问题 : ajax error:{"readyState":0,"status":0,"statusText":"error"} 异常描述: 第一次ajax,后台都没问题,但是却进入error方法,错误码0,错误信息error。
3713 0
【Kotlin Spring Boot 服务端开发: 问题集锦】 Spring Security : 自定义AccessDeniedHandler 处理 Ajax 请求
【Kotlin Spring Boot 服务端开发: 问题集锦】 Spring Security : 自定义AccessDeniedHandler 处理 Ajax 请求 AccessDeniedHandler 接口定义: package org.
3113 0
23703
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载