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

本文讨论了在Web开发中使用JS和服务器进行Get和Post操作时,遇到中文参数乱码的问题,并介绍了如何通过设置content-type参数和Jetty服务器的queryEncoding来解决此问题。同时,提供了改进方案以避免乱码产生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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是如何进行处理的呢?

[quote]
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 设定编码。[/quote]

对于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编码和解码,所以就不存在乱码的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值