我們知道在通過post方式向伺服器發送ajax請求時最好要通過設定請求頭來指定為application/x-www-form-urlencoded編碼類型。知道通過表單上傳檔案時必須指定編碼類型為"multipart/form-data"。而text/plain是我們在做純文字傳輸時防止接收資料時出現編碼混亂而設定的。可是我一直沒有搞清楚為什麼要這麼設定。後來查了些資料才找到了三者的差別。
application/x-www-form-urlencoded
這是通過表單發送資料時預設的編碼類型。我們沒有在from标簽中設定enctype屬性時預設就是application/x-www-form-urlencoded類型的。application/x-www-form-urlencoded編碼類型會把表單中發送的資料編碼為名稱/值對。這是标準的編碼格式。當表單的action為post的時候,浏覽器把form資料封裝到http
body中,然後發送到伺服器。當表單的action為get的時候,application/x-www-form-urlencoded編碼類型會把表單中發送的資料轉換成一個字元串(name=coderbolg&key=php),然後把這個字元串附加到url後面,并用?分割,接着就請求這個新的url。當我們通過post方式向伺服器發送ajax請求時最好要通過設定請求頭來指定為application/x-www-form-urlencoded編碼類型。方法是在xmlobject.open()方法之後添加
不然伺服器會接收不到post過來的資料。
multipart/form-data
這個是專門用來傳輸特殊類型資料的,如我們上傳的非文本的内容,比如圖檔或者mp3等。multipart/form-data編碼類型會把表單中的發送的資料編碼為一條消息,頁面上每個表單控件對應消息中的一部分。當表單中有file類型控件并希望它正常工作的話(廢話吧)就必須設定成multipart/form-data類型,浏覽器會把整個表單以控件為機關分割,并為每個部分加上content-disposition(form-data或者file),content-type(預設為text/plain),name(控件
name)等資訊,并加上分割符(boundary)。
text/plain
資料以純文字形式進行編碼,其中不含任何控件或格式字元。沒有什麼好說的。