$.ajax Post 數據指定類型為application/json 的時候,后台無法直接request到數據


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM