AJAX提交数据时的中文处理

view plaincopy to clipboardprint?

<% @ pagelanguage="java" import="java.util.*" pageEncoding="UTF-8"%>

06年时,就开始用AJAX技术了,当时这个名词还没兴起,后来听说AJAX,才发现原来还有这个叫法。 

早期,相关资料相当少,中文问题非常头疼,直到现在,网上也没有一个很好的解决方式。

最近,了解到一些朋友又深陷其中,便把自己以前的解决方法拿出来晒晒,希望对误入该行业的朋友有些帮助。

原理:html不能设置编码,但是xml可以,我们采用xml,把数据携带过去,不就可以了嘛。

js核心代码:

//注:xmlDoc,xmlHtml对象创建请用更完善的方式,这里只是简单演示一下
function doSubmit(){
var str=document.getElementById("input1").value;
//假设str就是你要提交的数据
alert(str);

//"MSXML2.DOMDocument", "Microsoft.XMLDOM", "MSXML.DOMDocument", "MSXML3.DOMDocument"
var xmlDoc=new ActiveXObject("MSXML2.DOMDocument");

//初始化xml文档对象
xmlDoc.loadXML("<html></html>");
xmlDoc.documentElement.text=str;//作为内容去携带
//如果采用属性携带数据更方便,那么可以用下面的方法
//xmlDoc.documentElement.setAttribute("name","msg");
//xmlDoc.documentElement.setAttribute("value",str);

alert(xmlDoc.xml);//查看生成的xml内容

//"MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp";
var xmlHttp=new ActiveXObject("MSXML2.XMLHttp.5.0");
var url="servlet/MyServlet?time="+(new Date()).getTime();
xmlHttp.open("POST",url,false);
xmlHttp.send(xmlDoc);//把xml对象发送出去
alert(xmlHttp.responseText);
}

servlet/action核心代码:

// 读取ajax发送来的xml数据
SAXReader xmlReader = new SAXReader();
Document document = null;
try {
document = xmlReader.read(request.getInputStream());
} catch (Exception ex) {
System.err.println("xml读取失败,可能没有xml数据.");
ex.printStackTrace();
}
System.out.println("接收到xml数据:" + document.asXML());

// 解析xml
String str = document.getRootElement().getText();
System.out.println("解析出来的数据:" + str);

// 返回结果
response.setContentType("text/html; charset=UTF-8");// GBK也行,指明返回的编码
response.getWriter().print("服务器返回信息:成功啦!\no(∩_∩)o...哈哈!");// 返回中文也没问题啦

关键点:

js中创建xmlDom对象,以及后台的解析,后台用了dom4j,来解析xml。

时间: 2024-09-09 07:08:27

AJAX提交数据时的中文处理的相关文章

javascript ajax提交数据中文乱码解决办法

一个UTF8页面需要POST数据到GB2312页面,这时中文的编码是按照UTF8提交过去的,GB2312页面无法接收.如何实现,网络搜索了一种很不错的方法,但有缺陷,这里一一说起. 1.FORM标签里加上accept-charset代码,这个能把FORM里的数据自动编码成指定的字符集提交,比如在UTF8页面提交数据到GB2312,代码就是accept-charset="GB2312″,但accept-charset除了IE其他浏览器都支持... 2.这时可以在提交时触发JS,document.c

代码-ajax提交数据后 ,怎么取值??

问题描述 ajax提交数据后 ,怎么取值?? <script type="text/javascript"> function validate(){ //var username = $('#usernmae').val(); var username = document.getElementById("username").value; alert(username); $.ajax({ url:"register", type

解决angular的$http.post()提交数据时后台接收不到参数值问题的方法_AngularJS

写此文的背景:在学习使用angular的$http.post()提交数据时,后台接收不到参数值,于是查阅了相关资料,寻找解决办法. 写此文的目的:通过上面提到的文章中的解决之道,结合自己的经验,总结了如下发现. 前端:html,jquery,angular 后端:java,springmvc一.平常使用的post提交和接收方式前端使用jquery提交数据. $.ajax({ url:'/carlt/loginForm', method: 'POST', data:{"name":&qu

前台ajax提交数据,后台接受,存入数据库

问题描述 前台ajax提交数据,后台接受,存入数据库 "{"1":{"top":125,"left":376,"process_to":[]},"2":{"top":339,"left":378,"process_to":[]},"3":{"top":280,"left":840

jquery ajax 数据绑定-JQUERY ajax提交数据到后台,进行数据库查询,然后重新绑定GridView.

问题描述 JQUERY ajax提交数据到后台,进行数据库查询,然后重新绑定GridView. 我在前台放了一个input,type=button点击后触发下面的ajax提交数据到后台.后台处理后对一个GridView进行数据绑定.前台代码如下: params = JSON.stringify(obj); $.ajax({ type: ""Post"" url: ""/aspx_consumption/Consumption_Home.aspx/

struts2-从页面表单提交数据时,为啥没有经过类型转换类?求解

问题描述 从页面表单提交数据时,为啥没有经过类型转换类?求解 在进行类型转换测试时发现,在从页面提交参数到后台时,并没有进过我配置的类型转换器,但在将后台类中的属性输出到页面上时,经过了类型转换器.有没有哪位骚年能指出错在哪里? struts.xml的配置内容<?xml version=""1.0"" encoding=""UTF-8""?><!DOCTYPE struts PUBLIC-//Apache S

Ajax的Post提交数据程序接受中文乱码解决办法

Ajax以POST方式提交,url形式为"url?param=xx&param2=xx"时,如果传递的参数是中文或日文,后台接收参数将出现乱码,疑似"灏?浼??ㄨ??rdquo;.此时我们需要将url编码成UTF-8.调用javascript方法encodeURI(URIstring),后台接收参数调用URLDecoder.decode(String s,String enc) 解码. 工作中遇到这个问题,起初打算用反射循环给属性转码,考虑到反射效率问题,为避免滥用反

struts2 action获取ajax提交数据中文乱码问题

有个人和我问题相同,地址在这: 解决方法: 在ajax的属性添加这句:contentType:'application/x-www-form-urlencoded; charset=utf-8',   

form提交数据时中文乱码

原因:     html 默认编码方式 iso-8859-1 ,而我们需要的是utf-8编码 解决的方法:   在form标签中 放入  代码如下 复制代码 accept-charset="utf-8" onsubmit="document.charset='utf-8'" 属性实例如下: <form id="search-box" class="goog-inline-block" target="_blan