$.ajax()传值中文乱码问题

发布于 2019-03-05  675 次阅读


关于JQuery $.ajax中文传值的问题。
     在工作中,我们不免会遇到中文乱码问题,今天就遇见一个代码传值乱码问题,直接上问题------------
		$.ajax({
			url: "",
			type: 'GET',
			async: true,
			contentType:"application/x-www-form-urlencoded; charset=utf-8",
			dataType:"json",
			data: {
				"commID": commIDs,
				"commNames": encodeURIComponent(commNames),
				"barcodeIDs": barcodeIDs,
				"packageUnitIDs": packageUnitIDs,
				"NOs": NOs,
				"priceSuggestions": priceSuggestions,
			},
			success : function succFunction(data) {
				alert("插入商品信息成功");
				alert(data);
				console.log(data);
			}
		});

 

在jQuery中的ajax传值可以设置传值得类型在contentType中进行设置,常见类型为:

(1)application/x-www-form-urlencoded

在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。 下边是说明: application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。 multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。 text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。 当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。 当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。

(2)application/json

这个Content-Type作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的JSON字符串

.而application/x-www-form-urlencoded在传中文字符的时候会出现乱码问题,常见的解决问题是:contentType:"application/x-www-form-urlencoded; charset=utf-8",在后面加上charset=utf-8设置字符类型,但是还是会有中文乱码问题,我也不太清楚为什么但是还有一种解决方式就是在后端进行字符转码:


String commNames=request.getParameter("commNames");

commNames = new String(commNames.getBytes("ISO8859-1"),"UTF-8");

new String(commNames.getBytes("ISO8859-1"),"UTF-8")这样去转码

最终也能解决中文字符乱码问题

二.也可以在前端把中文字符进行加密,使用js的  encodeURIComponent()  方法使得中文在传输的时候变成  %2C%2F%3F%3A%40%26%3D%2B%24%23  这样的格式,然后在后端使用


String commNames=request.getParameter("commNames");

commNames=java.net.URLDecoder.decode(commNames,"UTF-8");

 

java.net.URLDecoder.decode(commNames,"UTF-8")这种方式进行解码,得到相应的中文字符。


我们的征途是星辰大海