在$.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();
