Ajax中文乱码问题解决方案一:
1.向服务器发送数据:
客户端:
var date = document.getElementById("username");
var url = "AjaxServlet?username=" + encodeURI(encodeURI(date.value));
向服务器端发请的数据进行两次encodeURI:
Java 中的 request.getParameter(String)方法会进行一次 URI 的解码过程,
调用时内置的解码过程会导致乱码出现。而 URI 编码两次后,request.getParameter(String)
函数得到的是原信息 URI 编码一次的内容。
接着用 java.net.URLDecoder.decode(String str,String codename) 方法,
将已经编码的 URI 转换成原文。
服务器端:
String username = URLDecoder.decode(request.getParameter("username"),"UTF-8");
System.out.println(username);
2.接收服务器端数据:
原因:AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,
如果服务器段发送的数据不是UTF-8的格式,那么接收responseText或responseXML的值有可能为乱码。
解决办法:
在服务器指定发送数据的格式:
response.setContentType("text/xml;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
String message = "你输入的用户名是:" + username;
PrintWriter out = response.getWriter();
out.println("<response>");
out.println("<passed>" + Boolean.toString(false) + "</passed>");
out.println("<message>" + message + "</message>");
out.println("</response>");
out.close();
//客户端接收解析数据:
var mes =xmlHttp.responseXML.getElementsByTagName("message")[0].firstChild.data;
var val =xmlHttp.responseXML.getElementsByTagName("passed")[0].firstChild.data;
/**
* Ajax中文乱码问题
*
* @author zhangmingxue
*
*/
public class AjaxServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 6930790433539669771L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = URLDecoder.decode(request.getParameter("username"),"UTF-8");
System.out.println(username);
response.setContentType("text/xml;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
String message = "你输入的用户名是:" + username;
PrintWriter out = response.getWriter();
out.println("<response>");
out.println("<passed>" + Boolean.toString(false) + "</passed>");
out.println("<message>" + message + "</message>");
out.println("</response>");
out.close();
}
}
<html>
<head>
<title>AjaxEncoding</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<script language="javascript">
var xmlHttp;
function createXMLHttpRequest()
{
if (window.ActiveXObject)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
}
function validate()
{
createXMLHttpRequest();
var date = document.getElementById("username");
var url = "AjaxServlet?username=" + encodeURI(encodeURI(date.value));
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = callback;
xmlHttp.send(null);
}
function callback()
{
if (xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200)
{
var mes =xmlHttp.responseXML.getElementsByTagName("message")[0].firstChild.data;
var val =xmlHttp.responseXML.getElementsByTagName("passed")[0].firstChild.data;
setMessage(mes, val);
}
}
}
function setMessage(message, isValid)
{
var messageArea = document.getElementById("dateMessage");
var fontColor = "red";
if (isValid == "true")
{
fontColor = "green";
}
messageArea.innerHTML = "<font color=" + fontColor + ">"+ message + " </font>";
}
</script>
<body>
<input type="text" size="10" id="username" onchange="validate();" />
<div id="dateMessage"></div>
</body>
</html>
分享到:
相关推荐
在实际开发中,可以结合使用以上方法来解决Ajax中文乱码问题。例如,可以使用jQuery的`$.ajax`方法,设置`contentType`和`dataType`属性,以及在成功回调函数中处理响应数据: ```javascript $.ajax({ url: 'your-...
通过上述两种方法,可以有效地解决jQuery + ASP AJAX组合下出现的中文乱码问题,确保数据的正确传输和显示,提高应用的国际化水平和用户体验。无论是选择统一编码为UTF-8,还是通过修改jQuery源代码支持GB2312,...
【Java认证:Ajax中文乱码问题及解决方法】 在Java Web开发中,使用Ajax进行异步数据交互时,经常会遇到中文乱码的问题。这主要涉及到字符编码的处理,特别是当Ajax请求发送的数据包含中文字符时。以下是两种常见的...
### AJAX提交中文乱码解决方法 在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过JavaScript发起异步请求,与服务器进行数据交换,从而...
通过以上介绍的方法,我们可以有效地解决Ajax请求过程中可能出现的中文乱码问题。关键在于确保数据在发送和接收过程中的编码一致性。希望本文能帮助开发者更好地理解和处理这类问题,提升用户体验。
主要解决在ajax中中文参数传递过程中,服务器接收到中文乱码的问题
针对Ajax中文乱码问题,这里提出一个解决方案,这个方案在作者的开发环境中(XP, Eclipse, GB18030编码)已经成功解决了问题: 1. **设置请求头**: 在发送POST请求前,需要设置Content-Type头,告诉服务器数据的...
### 二、使用AJAX解决乱码问题的方法 #### 1. 设置正确的编码格式 在ASP.NET中,可以使用`<globalization>`标签在Web.config文件中设置请求和响应的编码格式。例如: ```xml requestEncoding="utf-8" ...
### 三、其他可能的原因及解决方法 除了上述配置之外,还有其他一些可能导致乱码的原因: 1. **客户端编码设置**:确保客户端JavaScript代码中发送请求时使用的编码与服务器端一致。 在提供的示例代码中,可以...
总结来说,解决Struts框架下Ajax发送中文乱码问题的关键在于: 1. 确保Ajax请求时设置正确的`Content-Type`,以UTF-8编码发送数据。 2. 在Struts配置文件中配置`CharacterEncodingFilter`或在Action中手动设置请求...
解决这个问题通常涉及到编码设置的调整,下面将详细介绍两种方法来解决Struts中的中文乱码问题。 **方法一:配置Filter** 1. **添加过滤器**:首先,我们需要在Web应用的`web.xml`文件中添加一个`...
是因为XMLHttp在处理返回的responstText的时候把responstBody按UTF-8编码进行解码的,如果服务器端送出的数据流的确是UTF-8编码,那么中... 您可能感兴趣的文章:php生成二维码时出现中文乱码的解决方法PHP中使用file
**Ajax 乱码解决方案** Ajax 乱码问题在开发Web应用程序时经常遇到,尤其是在涉及到不同编码格式时。本文将深入探讨Ajax与字符编码相关的技术细节,并提供几种有效的解决策略。 首先,JavaScript处理字符的方式是...
AJAX 到 Servlet 乱码解决方案 在 Web 开发中,使用 AJAX 通过 URL 传参数给 Servlet 时,经常会遇到乱码问题,即使使用了统一的字符编码也没用。下面我们来探讨这个问题的解决方案。 问题描述 当我们使用 AJAX ...
本教程将详细介绍如何解决AJAX中文乱码问题,以在Windows Server 2008环境下为例,但原理适用于其他操作系统。 首先,我们需要理解乱码产生的原因。乱码通常是由字符编码不一致引起的。服务器和客户端之间传输的...
解决JQuery AJAX中文乱码问题的步骤如下: 1. **设置请求编码**:在发送AJAX请求时,确保请求头中的`Content-Type`设置为`application/x-www-form-urlencoded;charset=UTF-8`。对于JQuery,你可以这样做: ```...