`
nirvana1988
  • 浏览: 137568 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

jquery异步提交表单乱码解决方法

阅读更多

     最近的开发中遇到了jquery异步提交表单数据时出现了中文乱码的问题。先说一下开发环境,本地编码格式为GBK(服务器为本机,因此服务器端的编码格式也是GBK了),webwork框架默认编码也是GBK。

    第一次出现乱码时,尝试着将webwork的默认编码修改为UTF-8。这样服务器端所接收到的中文字符正常显示,可以确定webwork的参数拦截器在进行参数注入时,客户端所提交的中文数据已经变为乱码,修改webwork的默认编码集显然是不合理的。

 

     首先想到的是使用encodeURI()函数在客服端对用户提交的数据项进行编码,服务器端再用URLDecode类解码。但由于客户端所提交的数据项比较多,对每个数据项都进行编解码会产生大量的与业务无关的代码。最终想到了使用webwork中提供的域模型去接收分散的数据类型,这样可以统一在服务器端对domain实体中的每个属性值进行解码。以下是具体的实现:

 

     客户端:

  $("input[type='text']").each(function(){
   	       $(this).val(encodeURI($(this).val()));
  });  //表单提交前对每个text控件的value采用encodeURI函数编码
  
 $("#subForm").ajaxSubmit(options);  //subForm为要提交的表单的id
 
//表单提交后,立即解码,防止用户看到编码后的数据
$("input[type='text']").each(function(){
     $(this).val(decodeURI($(this).val()));
});

 

   服务器端:

   

import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Type;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;

/**
 * @describe: 对javabean中指定类型的属性按照指定的编码集解码
 * @author:    Nirvana*@version:   V1.0  2011-6-20上午10:44:24 create 
 */
public class Decoder<T> {

	/**
	 * 在指定的Class中获取指定Type的属性名 
	 * @param objClass 指定与对象相关联的Class
	 * @param type  对象的属性类型
	 * @return
	 */
	private List<String> getPropertyNames(Class objClass, Type type) {
		Field[] fields = objClass.getDeclaredFields();
		List<String> propertyNames = new ArrayList<String>();
		for (Field f : fields) {
			if (f.getType().equals(type)) {
				propertyNames.add(f.getName());
			}
		}

		return propertyNames;
	}

	/**
	 * 按照charset字符解码obj对象中属性类型为指定type的属性值
	 * @param obj    需解码的javabean
	 * @param charset 解决字符集
	 * @param type  需解码的属性类型
	 * @return  返回解码后的javabean
	 */
	public T decode(T obj, String charset, Type type) {

		List<String> propertyNames = getPropertyNames(obj.getClass(), type);

		for (String name : propertyNames) {
			try {
				String str = BeanUtils.getProperty(obj, name);
				if (str == null)
					continue;
				BeanUtils.setProperty(obj, name, URLDecoder
						.decode(str, charset));
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			} catch (NoSuchMethodException e) {
				e.printStackTrace();
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		}
		return obj;
	}

}

  在服务器端构建一个domain对象的Decoder,再调用decode方法对指定类型的属性值进行解码。目前Decoder只支持基本数据类型和String类型数据的解码。

  

 

分享到:
评论

相关推荐

    如何解决JQuery ajaxSubmit提交中文乱码

    在Web开发过程中,使用JQuery的ajaxSubmit方法进行表单提交时,中文乱码问题是一个常见的困扰。中文乱码问题通常发生在数据的提交和接收过程中,由于字符编码的不一致导致。为了解决这个问题,首先需要了解JQuery的...

    jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)

    在Web开发过程中,当我们处理使用GBK编码的页面进行表单提交时,特别是当使用jQuery的AJAX方法进行异步请求时,我们可能会遇到字符编码问题。UTF-8编码广泛应用于国际化场景,但GBK由于历史原因在中国等地区仍在广泛...

    jQuery.validationEngine 表单验证中文版

    jQuery.validationEngine是一款强大的JavaScript插件,专用于前端表单验证。这款插件以其简洁的API、丰富的验证规则和良好的国际化支持而备受青睐。在中文环境中,它可以为用户提供友好的中文提示,确保用户输入的...

    jQuery Ajax过滤器

    本文将深入探讨jQuery中的Ajax过滤器及其在Ajaxform表单提交中的应用,以及如何解决可能出现的乱码问题。 首先,让我们理解什么是jQuery Ajax过滤器。在jQuery中,`ajaxSend`、`ajaxComplete`、`ajaxSuccess`、`...

    springmvc利用jquery.form插件异步上传文件示例

    在web.xml文件中,我们需要配置一个过滤器来解决表单提交时的中文乱码问题。通常我们会使用Spring提供的CharacterEncodingFilter过滤器,设置其encoding参数为UTF-8,以确保中文字符能够正确处理。 在SpringMVC的...

    使用JQuery框架设计的网页

    在描述中提到的网页可能有乱码问题,这可能与字符编码设置有关,使用jQuery可以轻松地对页面中的文本进行操作,例如修改元素的文本或替换内容,以解决可能出现的编码问题。 其次,jQuery提供了丰富的DOM操作方法,...

    web前端培训教程表单序列化共4页.pdf.zip

    2. jQuery的`serialize()`和`serializeArray()`:这两个jQuery方法方便地将表单数据序列化。`serialize()`返回一个URL编码的字符串,`serializeArray()`则返回一个包含键值对的数组,便于进一步操作。 3. `...

    struts2_json_jquery_集成详解.docx

    Struts2、JSON和jQuery的集成是Web开发中常见的技术栈,主要目的是为了实现...通过AJAX,用户输入的数据能够异步提交到服务器,服务器处理后返回JSON数据,jQuery解析数据并在页面上显示结果,从而提供良好的用户体验。

    JQuery 办公系统框架可应用于CRM系统

    - **数据交互**:在CRM系统中,jQuery可以配合Ajax技术实现异步数据交换,使得用户无需刷新整个页面就能获取或更新数据,提升用户体验。 - **表格和列表处理**:jQuery插件如Datatables能帮助创建可排序、可搜索的...

    php多文件上中文无乱码

    当用户提交包含`&lt;input type="file"&gt;`的表单时,服务器端的`$_FILES`会包含关于上传文件的信息,如文件名、类型、大小、临时存储路径等。可以使用`move_uploaded_file()`函数将临时文件移动到指定位置,确保文件安全...

    jQuery ajaxForm()的应用

    在jQuery中,ajaxForm()是一个专门用于处理表单提交的函数,它属于jQuery Form插件的一部分。 首先,ajaxForm()的作用是对即将使用AJAX方式提交的表单进行预处理。它可以将所有需要的事件监听器添加到表单中,而...

    Jquery的Ajax技术使用方法

    2. **$.post()**: 类似于$.get(),但它用于发起POST请求,通常用于提交表单数据。POST请求不会受到字节码乱码问题的影响。示例: ```javascript $.post('/web22-ajax/ajaxServlet2', {name: 'muzidigbig', age: 22...

    达内servlet/jsp/jquery资料

    - **POST** 方法则用于提交数据,请求参数位于请求体中。 - POST请求更适用于安全性要求较高的场景,因为它不会将敏感信息暴露在URL中。 ### 9. 表单处理 - 在Web开发中,表单是收集用户输入的主要手段之一。 - ...

    JQuery用户名校验的具体实现

    比如,可以使用$.get()方法发送异步请求(AJAX请求)到服务器,校验用户输入的用户名是否已被使用或是否符合要求。这个方法允许我们在不重新加载页面的情况下与服务器交换数据,并且可以指定一个回调函数来处理响应...

    Ajax学习文档(无门槛-精)Markdown File (.md)

    Ajax处理字符编码时可能出现乱码,解决方法包括设置响应头的字符集、在JavaScript中处理字符编码,以及确保服务器返回的响应内容和客户端的字符集一致。 ### 4. 同步与异步 - **同步**:请求发送后,浏览器会等待...

    在asp.net中使用jquery实现无刷新的验证用户名是否存在

    在本例中,使用jQuery的`$.ajax()`方法发送异步请求到服务器端,服务器端则执行相应的逻辑判断用户名是否已存在,并将结果返回给前端。前端接收到服务器返回的数据后,根据返回的信息更新页面上的显示状态。 ### 三...

    SpringMVC+Jquery实现Ajax功能

    4. **配置过滤器**:配置`CharacterEncodingFilter`以解决POST请求可能出现的乱码问题,确保请求和响应使用UTF-8编码。 5. **配置SpringMVC配置文件**(例如`applicationContext-mvc.xml`):定义处理器映射器、...

    我的Ajax学习笔记

    6. **无表单提交**:Ajax请求无需使用form标签,而是通过JavaScript直接构造请求数据。 7. **ID属性**:Ajax中使用ID属性来定位DOM元素,以便进行操作。 8. **div与span**:div常用于组织大块内容,内容会独占一行...

Global site tag (gtag.js) - Google Analytics