jquery与Jetty交互中关于Get和Post的Ajax提交对于中文参数的处理(

在Web开发中,对于js与服务器的操作一般就是Get和Post两种操作。使用JQuery的ajax请求,我们一般会用到两种Get和Post,对于中文参数乱码的问题,之前网上大部分的解决都是JQuery的content-type设置为:application/x-www-form-urlencoded; charset=UTF-8,新版的jquery1.8.2已经默认就是这个,所以不需要再进行更改。
关于content-type的参数的解释:
When sending data to the server, use this content type. Default is "application/x-www-form-urlencoded; charset=UTF-8", which is fine for most cases. If you explicitly pass in a content-type to $.ajax(), then it'll always be sent to the server (even if no data is sent). If no charset is specified, data will be transmitted to the server using the server's default charset; you must decode this appropriately on the server side.

那么会将数据按照UTF-8的编码传给Server端。那么对于jetty是如何进行处理的呢?

引用

Jetty 7 get URI queryString 编码默认使用 UTF-8 编码,可以通过 request.setAttribute(“org.eclipse.jetty.server.Request.queryEncoding”,”GBK”) 设定查询参数的编码,如果不设定则默认读取系统属性 -Dorg.eclipse.jetty.util.URI.charset=GBK 的编码,如果系统属性也没有设定,则默认为 UTF-8 。
       POST 参数默认使用 Content-type 中的 Charset 编码,如果 Charset 没有,则默认使用 UTF-8 编码,当然可以在使用之前使用 request.set CharacterEncoding 设定编码。


对于Post请求,会使用Servlet的request.setCharsetEncoding的进行解码处理; 而如果是Get请求,那么将使用服务器的URI.Encoding指定的编码进行处理。

举例:产生中文乱码的情况:
代码:

$.ajax({
   url:"some.php",
   data:{"param":param},
   dataType:"json",
   type:"Get"
});


服务器:Jetty,-Dorg.eclipse.jetty.util.URI.charset=GBK
结果:产生中文参数乱码
原因:
js的ajax请求中,data参数会使用utf-8编码,而get请求又会使用GBK进行解码,导致乱码存在。
改进方案:
1.一种是js提交使用Post方式,在servlet端增加request.setCharsetEncoding("UTF-8"),让传入和编码的参数保持一致。
2. 使用url的queryString的方式进行传递,即更改前台的转码:

$.ajax({
   url:"some.php?param="+param,
   dataType:"json",
   type:"Get"
});

这样的请求也都会使用jetty服务器的org.eclipse.jetty.util.URI.charset的编码来处理。因为都是GBK编码和解码,所以就不存在乱码的问题。

你可能感兴趣的:(jquery)