jQuery-ajax

jQuery-ajax常見屬性

contentTypejavascript

含義:發送信息至服務器時的內容編碼類型
類型:String 或 Boolean
默認值:"application/x-www-form-urlencoded; charset=UTF-8";默認值適合大多數狀況
注:jQuery-1.6以後能夠將此屬性設爲 false,當該屬性爲false時,即告訴服務器不設置任何一種 contentTypehtml

dataTypejava

含義:預期服務器返回的數據類型
類型:String
默認值:若是不指定,jQuery 將自動根據 HTTP 包 MIME 信息來智能判斷,可用值:
"xml":返回 XML 文檔,可用 jQuery 處理
"html":返回純文本 HTML 信息;包含的 script 標籤會在插入 dom 時執行
"script":返回純文本 javascript 代碼;不會自動緩存結果;除非設置了 "cache" 參數
"json":返回 json 數據
"jsonp":JSONP 格式
"text":返回純文本字符串ajax

processDataspring

含義:發送 data 至服務器時將 data 進行轉化
類型:Boolean
默認值:true;默認狀況下,經過 data 選項傳遞至服務器的數據,若是是一個對象(技術上講只要不是字符串),都會默認轉換成一個查詢字符串,以配合默認的 內容類型(contentType) "application/x-www-form-urlencoded";若是要發送 DOM 數信息或其它不但願轉換的信息(例如 file),請設置爲 falsejson

jQuery-ajax 常見問題

  • 在使用 jQuery-ajax 實現異步文件上傳時要注意,要將 contentType 和 processData 屬性設置爲 false;不然服務器接收不了上傳的文件

示例緩存

$("#ajax_upload").click(function () {
            var formData = new FormData();
            formData.append("file",document.getElementById("file0").files[0]);
            $.ajax({
                url : "ajaxUpload",
                data : formData,
                type : "post",
                contentType:false,
                processData:false,
                success : function(response){
                    console.log(response);
                }
            });
        });

注:服務器

  1. contentType 默認值爲 "application/x-www-form-urlencoded; charset=UTF-8",而文件上傳的 contentType 應該爲 "multipart/form-data",將 contentType 設置爲 false 後,服務器檢測到上傳的是文件類型時,會自動將request headers中的 contentType 設置爲 "multipart/form-data"
  2. 上傳文件時向服務器傳輸的是文件類型,此時不須要將數據轉換爲查詢字符串,就保持爲文件自己,所以要將 processData 設置爲 false
  3. jQuery 的 id 選擇器獲取不了文件對象(不知怎麼回事),使用原生 javascript 的 document.getElementById 能夠獲取
  • 在 controller 方法中返回 String 時要注意,若返回的字符串包含中文,則須要在 @RequestMapping 中加上 produces = {"text/html;charset=UTF-8;"},不然會出現中文亂碼

示例app

@RequestMapping(value = "ajaxDemo",produces = {"text/html;charset=UTF-8;"})
    @ResponseBody
    public String ajaxDemo(String username){
        System.out.println(username);
        return username;
    }

注:dom

  1. controller 中的方法返回是 String 時,jQuery-ajax 中的 daatType 屬性應該設置爲 "text",而不能設置爲 "json"
  2. springMVC 中有一系列 HttpMessageConverter 來處理用 @ResponseBody 註解的返回值,如返回 List 或其它的類型則使用 MappingJacksonHttpMessageConverter 來處理;返回 String 時,則使用 StringHttpMessageConverter 來處理,而 StringHttpMessageConverter 使用的字符集時 iso-8859-1,並且是 fianl的。因此當返回 text 有中文時會出現亂碼
相關文章
相關標籤/搜索