今天我花了一下午的时间解决AJAX验证唯一性的乱码问题,在网上查了很多,也问了同学,都无法解决。我同学用的是AJAX传值到servlet中,我以前也测试过,没乱码,可我这次是传值到action中,再接值就是乱码了。不过后来,在加了个encodeURIComponent()函数后,就OK了,不过我在网上查了下原因。
本质原因是 escape() 只是为 ASCII字符做转换工作,转换成的 %unnnn 这样的码,如果要用更多的字符如 UTF-8字符库,就一定要用 encodeURIComponent() 或 encodeURI() 转换才可以成 %nn%nn 这的码才可以(网上是这么解释的,我觉得也有一定的道理)。
好下面就是我的一点总结:
这个是create.jsp页面,我没全复制过来,其实只要看看 部门名称的input标签就行了(id、onblur())。
<%@ page language="java" pageEncoding="utf-8"%>
<%@ include file="/commons/taglibs.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>部门添加</title>
</head>
<script src="${ctx}/js/showLayer.js"></script>
<script src="${ctx}/js/unique.js"></script>
<link rel="stylesheet" href="${ctx}/css/showLayer.css" type="text/css"/>
<body>
<div class="tabList" id="tabList1">
<form action="departmentAction_create.action" method="post">
<table width="100%">
<tr>
<td><table width="100%" >
<tr align="center">
<td ><span class="STYLE1">部门添加</span></td>
</tr>
</table></td>
</tr>
<tr>
<td>
<table width="100%" cellpadding="3" cellspacing="1"bgcolor="#666666" >
<tr>
<td bgcolor="#FFFFFF"><div align="center">部门名称</div></td>
<td bgcolor="#FFFFFF"><input id="unique" type="text" name="department.name" size="20"
class="validate[required]" onblur="getBackInfo();"/><div id="disCheckResult"></div></td>
</tr>
<tr>
这个是unique.js,重点就是encodeURIComponent().
function getBackInfo()
{
if(document.getElementById('unique').value=="")
{
tag=0;
document.getElementById("disCheckResult").innerHTML = '名称不能为空' ;
}
else
{
var t=document.getElementById("unique").value;
url='departmentAction_uniqueCheck.action?department.name='+encodeURIComponent(t); //定义网址参
if(window.XMLHttpRequest)
{
xmlhttp_request = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
xmlhttp_request = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
return;
}
//xmlhttp_request=getXMLRequester(); //调用创建XMLHttpRequest的函数
xmlhttp_request.onreadystatechange = doContents; //调用doContents函数
xmlhttp_request.open("get", url, true);
xmlhttp_request.send(url);
}
}
function doContents()
{
if (xmlhttp_request.readyState == 4)
{
alert(xmlhttp_request.readyState+'用来添加提示信息');
// 收到完整的服务器响应
if (xmlhttp_request.status == 200)
{
alert(xmlhttp_request.responseText);
document.getElementById("disCheckResult").innerHTML=xmlhttp_request.responseText;
}
else
{
alert(xmlhttp_request.status);
}
}
}
这是我的departmentAction.java,特别注意response的加入,这样将值传到前台页面才不会有乱码。
package mms.department;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import mms.major.Major;
import mms.major.MajorDao;
import org.apache.struts2.interceptor.ServletResponseAware;
import common.ssh.BaseAction;
import common.ssh.PageAction;
/**
* @author zuochanjuan
* time 2010/4/1
*/
public class DepartmentAction extends PageAction implements BaseAction,ServletResponseAware{
private static final long serialVersionUID = 1614156606370717844L;
private HttpServletResponse response;
private Department department=new Department();
private DepartmentDao departmentDao;
private List<Department> deplist=new ArrayList<Department>();
private List<Major> mlist=new ArrayList<Major>();
private MajorDao majorDao;
private String zhuanye;
String[] ids;
//验证唯一性
public void uniqueCheck() throws IOException{
response.setCharacterEncoding("utf-8");
response.addHeader("Cache-Control","no-cache,must-revalidate");
response.addHeader("Pragma","no-cache");
response.setContentType("text/xml");
System.out.print("is invoked!!!"+department.getName());
String temp=new String(department.getName().getBytes("iso8859-1"),"utf-8");//必须转一下
System.out.print("is invoked!!!"+temp);
boolean flag=departmentDao.checkValueUnique("Department", "name", temp);
PrintWriter out = response.getWriter();
if(flag){
out.print("该部门已存在");
}else{
out.print("可以继续");
}
}
/*.........这里代码先不粘过来了*/
public void setServletResponse(HttpServletResponse response) {
this.response=response;
}
}
这个是我的departmentDao.java,我以后把这个方法封装起来,所以把这个方法写成这样。
package mms.department;
import org.hibernate.Query;
import common.ssh.BaseDao;
/**
* @author zuochanjuan
* time 2010/4/1
*
*/
public class DepartmentDao extends BaseDao<Department>{
/*........省略*/
//按名称查询,验证唯一性
public boolean checkValueUnique(String className,String property,String value){
System.out.print("unique--"+className+"--"+property+"--"+value);
if(className==null||property==null||value==null) return false;
String hql="from "+className+" c where c."+property+"='"+value+"'";
Query query=this.sessionFactory.getCurrentSession().createQuery(hql);
boolean flag = false;
if(query.list()!=null&&query.list().size()>0)
flag = true; //如果有查到对应的结果就返回true
return flag;
}
}
分享到:
相关推荐
本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**:服务器与客户端(浏览器)之间使用的字符编码格式不同,例如服务器使用GBK编码,而浏览器使用UTF-8编码...
通过大量的事例,用通俗易懂的方式,想你展示ajax的魅力所在,并特别说明在解决常见问题的通用办法
### jQuery + ASP AJAX 中文乱码问题解决方案 在开发基于jQuery和ASP的Web应用程序时,中文乱码问题可能成为困扰开发者的一大难题。特别是在使用Ajax进行前后端数据交互时,中文字符可能会出现乱码现象,影响用户...
本文将详细探讨如何解决Ajax请求过程中的中文乱码问题,并提供具体的解决方案。 #### 二、问题分析 在使用Ajax进行数据传输时,中文乱码问题通常出现在以下两个环节: 1. **发送表单数据时中文乱码**:当通过Ajax...
本文将深入探讨Ajax中文乱码问题的原因及其解决方案。 首先,我们需要理解Ajax乱码的根源。当JavaScript发送HTTP请求时,如果服务器和客户端之间关于字符编码的约定不一致,就会导致乱码。常见的原因包括: 1. **...
总的来说,解决Ajax乱码问题的关键在于理解字符编码的工作原理,确保数据在整个传输过程中的编码与解码一致性,以及正确设置服务器和客户端的编码设置。在实际应用中,还应考虑跨平台和跨浏览器的兼容性,以确保解决...
需要注意的是,jQuery默认的`contentType`可能不包含`charset`,因此明确指定`charset=UTF-8`是解决乱码问题的关键。 **C++和Java的比较:传统中的优点** 虽然C++被批评为复杂和难以掌握,但它在设计时考虑到了与...
在本文中,我们将深入探讨如何解决使用Ajax进行POST请求时出现的中文乱码问题。首先,我们要理解Ajax中文乱码的根源,它通常涉及到字符编码的不一致,尤其是在客户端与服务器之间的通信过程中。 Ajax(Asynchronous...
简单整理的乱码处理方案,jquery的ajax解决UTF-8以及GBK的问题
本文将详细讲解如何解决C# Ajax Post数据乱码问题。 ### 一、理解问题根源 首先,我们需要了解为什么会出现乱码的情况。这通常是因为客户端和服务器端对于字符编码的理解不一致所导致的。具体来说,如果客户端使用...
AJAX 到 Servlet 乱码解决方案 在 Web 开发中,使用 AJAX 通过 URL 传参数给 Servlet 时,经常会遇到乱码...3. 使用 `encodeURI()` 函数和 `URLDecoder` 类解决乱码问题。 4. 在 Web 应用程序中处理中文参数的方法。
解决Ajax乱码问题的关键在于确保整个数据传输链路上的编码一致性。 1. **字符编码** - **UTF-8**:广泛使用的编码格式,支持多种语言,包括中文,且与CPU字节顺序无关,具有较高的容错能力。 - **GBK/GB2312**:...
总结来说,解决Ajax URI乱码问题的关键在于理解和匹配浏览器的编码行为,并在服务器端进行相应的配置。通过以上策略,可以有效地解决大部分浏览器的乱码问题,实现更好的跨浏览器兼容性。然而,对于特定情况,可能还...
一、解决Ajax乱码问题 Ajax发送和接收数据时,乱码问题主要出现在两个环节:发送请求时的数据编码和服务器返回数据的解码。以下是解决乱码的关键步骤: 1. 数据编码:在发送Ajax请求前,确保你的数据已经正确编码...
### AJAX解决中文乱码(Java/JSP) #### 知识点概述 在Web开发中,尤其是在使用Java与JSP技术栈进行开发时,经常会遇到的一个问题是:如何处理AJAX请求中的中文字符乱码问题。本篇文章将详细介绍如何通过前端编码...
总结来说,解决Struts框架下Ajax发送中文乱码问题的关键在于: 1. 确保Ajax请求时设置正确的`Content-Type`,以UTF-8编码发送数据。 2. 在Struts配置文件中配置`CharacterEncodingFilter`或在Action中手动设置请求...
### Ajax提交乱码问题的本质 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。当使用Ajax进行数据提交时,如果服务器端接收到的数据出现乱码,这通常是...