1. 程式人生 > >POST 提交資料的幾種方式

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