在$.ajax代码的时候,两端差不多的代码,一段可以提交,另一段在后台怎么样也无法request到ajax post的数据:
$.ajax({ type: "POST", url: window.prefixURL + '/CalendarHandler/InsertCalendarEventData2', contentType: 'application/json;charset=utf-8', data: { "data": myjson.stringify(data) }, dataType: 'json', success: function (doc) {
仔细对比了两段代码,发现无法Request的方法,前段ajax代码里多了这么一句话:contentType:'appcalition/json;charset=utf-8'
用HttpWachter查看到,提交的时候Content-Type也是不一样的,ajax里面不指定contentType的截图如下:
而加了contentType的截图如下:
在网络上搜索了一下:
multipart/form-data和application/x-www-form-urlencoded的区别
FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型,默认的缺省值是“application/x-www-form-urlencoded”。然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。
在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。
Browser端<form>表单的ENCTYPE属性值为multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,<input>的type属性必须是file。
当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1& amp; amp;name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。
当action为post时候,浏览器把form数据封装到http body中,然后发送到server
Post提交的数据:
结论:Post提交的数据,类型不可以为application/json.....个人推测Post是以流的方式提交,而Request["keyWorkd"]方式根本无法获取到Stream上来的数据。
后台可以直接通过代码获取到post上来的stream(流)
StreamReader stream=request.getInputStream();