由於最近遇到關於,ashx文件ajax解析參數的問題。查詢網上很多資料后,已經解決。
鑒於網上已經足夠多的,關於這個問題的文章。大部分內容來自互聯網,我這里只是做一些整理和記錄。特此說明並非原創。
Content-Type是返回消息中非常重要的內容,表示后面的文檔屬於什么MIME類型。Content-Type: [type]/[subtype]; parameter。例如最常見的就是text/html,它的意思是說返回的內容是文本類型,這個文本又是HTML格式的。原則上瀏覽器會根據Content-Type來決定如何顯示返回的消息體內容。
enctype 屬性規定在發送到服務器之前應該如何對表單數據進行編碼。
默認地,表單數據會編碼為 "application/x-www-form-urlencoded"。就是說,在發送到服務器之前,所有字符都會進行編碼(空格轉換為 "+" 加號,特殊符號轉換為 ASCII HEX 值)。
enctype值和意義:
application/x-www-form-urlencoded 在發送前編碼所有字符(默認)
multipart/form-data 不對字符編碼。在使用包含文件上傳控件的表單時,必須使用該值。
text/plain 空格轉換為 "+" 加號,但不對特殊字符編碼。
HTTP請求中,
1、get請求,參數url:http://test/ttt?name=value&name1=value1; 獲取方式 Request.QueryString[key]
2、post請求,Content-Type為application/x-www-form-urlencoded;參數在消息中也就是Form Data里面; 獲取方式 Request.Form[key]
3、post請求,如果不是上面的特定方式,由於數據格式不固定,所以只能才取最原始方式讀取數據流。
則在request payload中,通過讀取流的方式來處理;Request.InputStream.Read(...);
實體(Entity)
信息被作為請求或響應的有效負荷被傳遞。通俗的說就是,實體是指作為請求或者響應消息的有效載荷而傳輸的信息。
例如,當用戶想瀏覽某個Web頁面時,HTTP請求消息種的請求方法,響應消息中的狀態碼都不是有效載荷,它們都是為了實現文件下載這一最終目的而在客戶於服務器之間傳送的額外消息:而用戶所要瀏覽的HTML文件及其元消息(文件大小,最近修改時間等)才是有效載荷。
有效載荷(Payload)
通過前面的http定義可以了解到什么是payload。
請求request消息或響應response消息中可能會包含真正要傳遞的數據,這個數據我們就稱為消息的有效負荷,對應着就是request payload,response payload。
知道了什么是Request Payload,那服務端是如何接收並解析出我們通過Request Payload所傳遞的特殊格式的數據呢(比如表單鍵值對參數或復雜的json對象)?
一般服務端程序會根據頭字段中的Content-type的值來做特定的處理,如x-www-form-urlencoded。
下面兩種情況在chrome 中 看到的方式不同:
第一種,傳遞的是json對象過去,但是瀏覽器會將他序列化以后,在傳輸。
$.ajax({ url: _Url, type: 'POST', data: _Data, async: _sync ? false : true, contentType: "application/json", dataType: "json" });
第二種, JSON.stringify(_Data) 將json字符串傳遞,所以post過去的只是一個字符串。
$.ajax({ url: _Url, type: 'POST', data: JSON.stringify(_Data), async: _sync ? false : true, contentType: "application/json", dataType: "json" });