POST 提交資料的幾種方式
一.Content-Type欄位:伺服器端主要根據請求頭(header)中的Content-Type屬性來自動獲取請求主體採用的是何種編碼,再對訊息主體進行解析。
二.常見四種contentType
1. aplication/x-www-form-urlencoded
:form表單不指定enctype時的預設屬性。提交資料時,按照 key = val & key1 = val1
的方式進行編碼,鍵值對 key 和val都進行了 URL 轉碼。
注意1: JQuery 的 Ajax,Content-Type 預設值都是application/x-www-form-urlencoded;charset=utf-8
在有檔案提交的表單如下:
/**
* 帶file的表單提交
*/
$("#cms-file-submit").click(function(){
var data = $("#cms-form").serializeArray();
var fm = new FormData()
$(data).each(function(i){
fm.append(this.name, this.value);
});
fm.append('file', $("#file" )[0].files[0]);
// console.log(fm);
// 將獲取到的資料post給伺服器
url = SCOPE.save_url;
var jump_url = "";
$.ajax(
{
url:url,
type: 'POST',
data: fm,
dataType:'JSON',
cache: false,
contentType: false ,
processData: false,
success:function(){
//1.成功的處理
alert(1);
}
}
);
});
因此我們在使用$.ajax()時要設定
contentType: false
:(預設: “application/x-www-form-urlencoded”) 傳送資訊至伺服器時內容編碼型別.
processData: false
:(預設: true) 預設情況下,通過data選項傳遞進來的資料,如果是一個物件(技術上講只要不是字串),都會處理轉化成一個查詢字串,以配合預設內容型別 application/x-www-form-urlencoded
。
原因:我們給的data就是已經用FormData編碼好的資料,不需要jQuery進行字串轉換。
注意2: JQuery中採用的是utf-8編碼所以在做gbk編碼時候注意這個問題。
2. multipart/form-data
:在我們採用form表單上傳檔案時,必須讓form的enctyped等於這個值。
3.application/json
:告訴服務端訊息的主體是序列化後的 JSON 字串。可以支援複雜的結構化資料。
4.text/xml