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