Ajax上傳文件的cache、processdata、contentType屬性以及FormData對象的總結


Ajax上傳文件的cache、processdata、contentType屬性以及FormData對象的總結
前言:在之前的Ajax一次性上傳多張圖片並實現預覽的博客中提到,如果要用 Ajax 上傳文件,則需要使用 FormData 對象來作為數據,而不能使用 form 的 serialize 方法(原因是 serialize 方法得到的數據是一個字符串,其不支持二進制數據傳輸,因此無法上傳文件)

1.FormData對象

    var formdata = new FormData();//創建一個新的FormData對象
    //Ajax中的 data 屬性就是 formdata
    formdata.append('name','value'); //使用append的方法為 formdata 對象賦值
    $.ajax({
    type:'post',
    url:'url',
    contentType:false,
    processData:false,
    cache:false,
    data:formdata,
    success:function(res){
        console.log('success');
}
})

2.Ajax屬性:cache、processData、contentType
① cache:緩存
當發起一次請求后,會把獲得的結果以緩存的形式進行存儲,當再次發起請求時,如果 cache 的值是 true ,那么會直接從緩存中讀取,而不是再次發起一個請求了。
從 cache 的工作原理可以得出,cache 的作用一般只在 get 請求中使用。

② processData:處理數據
默認情況下,processData 的值是 true,其代表以對象的形式上傳的數據都會被轉換為字符串的形式上傳。而當上傳文件的時候,則不需要把其轉換為字符串,因此要改成false

③ contentType:發送數據的格式
和 contentType 有個類似的屬性是 dataType , 代表的是期望從后端收到的數據的格式,一般會有 json 、text……等
而 contentType 則是與 dataType 相對應的,其代表的是 前端發送數據的格式

默認值:application/x-www-form-urlencoded
代表的是 ajax 的 data 是以字符串的形式 如 id=2019&password=123456
使用這種傳數據的格式,無法傳輸復雜的數據,比如多維數組、文件等

有時候要注意,自己所傳輸的數據格式和ajax的contentType格式是否一致,如果不一致就要想辦法對數據進行轉換
把contentType 改成 false 就會改掉之前默認的數據格式,在上傳文件時就不會報錯了。


————————————————
版權聲明:本文為CSDN博主「joey無心快語」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_41564928/article/details/90580375


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM