中文乱码真的一个头疼的问题!这个项目我尝试用AJAX去做部分开发,这个问题让我头疼了俩次,在先前开发中我们用了tomcat做为服务器开发,乱码还好解决。但最后项目组采用jboss时简直让我郁闷死了,还好网上找了半天,终于解决了,非常感谢网上的牛人!!现转给大家。
我的开发环境:XP, eclipse,使用GB2312编码。
当遇到这个问题时,到网上去查了好多文章,提到几种解决方案,如:全站UTF-8编码;请求头编码为中文;使用javascript中的escape;
今天把问题解决了,很简单,是使用escape(或encodeURI,两个函数javascript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这是解决问题的关键。
我的例子涉及两个页面,一个是初始页面,一个是AJAX请求处理页面。
初始页面内容如下(hello.jsp):
/////////////////////////////////////////////////////////////////////////////////////
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%String path = request.getContextPath();%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>AJAX提交页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<script type="text/javascript">
function justdo(){
var post="name=王力猛&email=wallimn@sohu.com&bokee=http://wallimn.bokee.com";
post = encodeURI(post);
post = encodeURI(post);//两次,很关键
var xmlObj = new ActiveXObject('Msxml2.XMLHTTP');
var URL = '<%= path%>/page/act.jsp';//文件名需要调整成测试时的相应位置?
xmlObj.open ('post',URL,true);
xmlObj.setrequestheader("cache-control","no-cache");
xmlObj.setrequestheader("Content-Type","application/x-www-form-urlencoded");
xmlObj.send (post);//注意:POST方式,使用这个来发送内容?
}
</script>
</head>
<body>
<input type="button" value="提交" onclick="justdo()"/>
</body>
</html>
/////////////////////////////////////////////////////////////////////////////////////
ajax请求处理页面(act.jsp)的内容如下:这个文件可以是.java格式!
/////////////////////////////////////////////////////////////////////////////////////
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%String path = request.getContextPath();%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="java.net.URLDecoder"%>
<html>
<head>
<title>ajax deal</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<%
//遍历输出参数内容。
for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
String h = (String) e.nextElement();
String v = request.getParameter(h);
String mm = java.net.URLDecoder.decode(v, "UTF-8");
System.out.println("请求参数: " + h + " = " + mm);
}
%>
</body>
</html>
/////////////////////////////////////////////////////////////////////////////////////
分析:当调用request.getParameter()函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI编码两次后,request.getParameter()函数得到的是原信息URI编码一次的内容。再用可控的解码函数java.net.URLDecoder.decode()就可解出原始的正确的信息。
分享到:
相关推荐
### AJAX POST 与 GET 提交的区别详解 #### 一、GET与POST基本概念及应用场景 在探讨AJAX中GET和POST的区别之前,我们先来了解一下这两种请求方式的基本概念。 **GET**请求通常用于获取资源信息,它将参数拼接到...
### AJAX中使用JavaScript的send方法POST参数详解 #### 一、引言 在Web开发中,AJAX(Asynchronous JavaScript and XML)技术被广泛应用于实现网页的局部刷新,提升用户体验。其中,通过JavaScript发送POST请求是一...
本篇文章将深入探讨jQuery中的ajax、post、get方法以及如何使用json格式传递数据。 1. **jQuery的$.ajax()函数** `$.ajax()`是jQuery提供的核心Ajax功能,它可以实现异步数据交互。通过配置各种参数,可以灵活地...
在客户端代码中,我们使用XMLHttpRequest对象创建了一个Get请求和一个Post请求,并将参数传递给服务器端。在服务器端代码中,我们使用Request对象来获取参数,并返回结果。 结论 Get和Post请求都是HTTP请求方法,...
在ajax中使用post方法,用常规的参数格式:param1=a1¶m2=a2 ,当参数长度过长时,依然提交不成功。比如我们经常这样写一个ajax的post请求: $.ajax({ type: "post", // post or get contentType:"application...
### AJAX传递List对象数组知识点详解 #### 一、前言 在Web开发中,前后端交互是必不可少的一个环节。AJAX作为一种实现异步加载数据的技术,可以有效地提升用户体验。本篇将详细介绍如何通过AJAX来传递一个List对象...
在本示例中,我们将深入探讨如何使用AJAX进行POST方法的数据传递,这对于前端与后端交互以及实现页面动态更新至关重要。** 首先,我们要明白AJAX的核心在于XMLHttpRequest对象,它是JavaScript内置的对象,允许我们...
// 假设这是通过Ajax POST传递过来的压缩数据 $decompressed_data = gzdecode($compressed_data); ``` 解压后的数据可以进一步处理,例如存储到数据库或者执行其他业务逻辑。 使用这种方法,可以显著减少服务器与...
### Ajax的POST方法详解 #### 一、引言 在Web开发中,异步JavaScript与XML(Ajax)技术被广泛应用于提升用户体验,实现无需刷新页面即可加载数据的功能。本文将重点探讨Ajax中的POST方法,包括其基本原理、应用...
在“Post Callback”部分,我们讨论的是当Ajax POST请求完成后执行的回调函数。这个回调函数通常用来处理服务器返回的数据,如解析JSON,更新UI,或者处理错误信息。理解如何正确编写和使用回调函数是确保Ajax请求...
PHP 基于 jQuery 的 Ajax 技术传递 JSON 数据简单实例 本文主要介绍了 PHP 基于 jQuery 的 Ajax 技术传递 JSON 数据方法,以完整实例形式分析了 PHP 基于 jQuery 的 Ajax 无刷新提交数据实现方法。下面是详细的知识...
"前台Ajax与后台Json传递"这个主题就是关注如何高效地实现这一交互过程。Ajax(Asynchronous JavaScript and XML)技术允许我们在不刷新整个页面的情况下,实现局部数据的更新,而Json(JavaScript Object Notation...
- AJAX使前端可以向Lotus Domino服务器发送HTTP请求,传递数据如"name"、"count"和"message"。服务器接收到这些数据后,可以通过 Lotusscript 函数如`GetParameter`进行解析和处理。 6. **数据编码与解码**: - ...
Ajax POST请求允许我们在不刷新整个页面的情况下向服务器发送数据,通常用于提交表单或传递大量信息。然而,HTTP协议本身对请求体(包括POST数据)的大小有限制。默认情况下,大多数服务器和浏览器都限制了一个请求...
本文将深入讲解如何在jQuery AJAX中向后台传递数组参数,并提供示例代码。 首先,理解问题的关键在于JavaScript数组在传递给后台时,如果数组内包含的是对象,会被转化为`[object Object]`的字符串形式。这是因为...
对于POST请求,我们需要设置`xhr.setRequestHeader`来指定Content-Type,通常是`application/x-www-form-urlencoded`,并且在`send`方法中传递数据: ```javascript var data = 'param1=value1¶m2=value2'; // ...
Bootstrap进度条与AJAX后端数据传递结合使用实例详解 Bootstrap进度条与AJAX后端数据传递结合使用是Web开发中常见的技术结合,通过Bootstrap进度条展示数据加载的进度,提高用户体验,AJAX技术则可以实现在页面不...
1. 参数传递方式:get 请求将参数数据队列加到提交表单的 ACTION 属性所指的 URL 中,而 post 请求通过 HTTP post 机制,将表单内各个字段与其内容放置在 HTML HEADER 内一起传送到 ACTION 属性所指的 URL 地址。...
### Jquery Ajax方法传递到Action的补充说明 #### 1. Ajax在前端与后端的数据交互 Ajax(Asynchronous JavaScript and XML)技术是实现网页异步数据交互的重要手段。在Web开发中,前端可以通过Ajax向服务器发送...
在本场景中,我们将探讨如何使用AJAX来传递JSON数组,并在Struts2的Action中接收和处理这些数据。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析...