$.ajax请求request.getInputStream()得不到数据问题

请求中添加参数contentType

1.在不做任何修改的情况下,调用request.getParameter()可以获取到部分数据,即url拼接参数的数据。

2.在不做任何修改的情况下,如果在之前任何地方都不调用request.getParameter(),而是直接调用request.getInputStream()是可以获取到数据的。

3.原来客户端使用默认的请求头Content-Type:application/x-www-form-urlencoded,修改此值为multipart/form-data或者application/octet-stream之后,通过request.getInputStream()可以获取到数据,即使之前调用过request.getParameter(),最后的解决方法当然是客户端修改Content-Type。

 

 $.ajax({
	  type: "post",
	  url: "。。。。。。。。。。。。。。",
	 data: { param1: 1, param2: 2 },
	  //contentType: "application/json; charset=utf-8",//(可以)
	 //contentType: "text/xml",//(可以)
	  //contentType:"application/x-www-form-urlencoded",//(可以)
	 dataType: "json",
	  success: function (data) {
		  if (data != "") {
			
		  }
	  }
})

 

 最后注意 request.getParameter()、 request.getInputStream()、request.getReader()这三种方法是有冲突的,因为流只能被读一次。例如: 

1. 当form表单内容采用 enctype=application/x-www-form-urlencoded编码时,先通过调用request.getParameter() 方法得到参数后,再调用 request.getInputStream()或request.getReader()已经得不到流中的内容,因为在调用 request.getParameter()时系统可能对表单中提交的数 据以流的形式读了一次,反之亦然。 
2. 当form表单内容采用 enctype=multipart/form-data编码时,即使先调用request.getParameter()也得不到数据,但是这时调用 request.getParameter()方法对 request.getInputStream()或request.getReader()没有冲突,即使已经调用了 request.getParameter()方法也 可以通过调用request.getInputStream()或request.getReader()得 到表单中的数据,而request.getInputStream()和request.getReader()在同 一个响应中是不能混合使用的,如果混合使用就会抛异常。

 

猜你喜欢

转载自278653219.iteye.com/blog/2360553