您好,登錄后才能下訂單哦!
本篇文章為大家展示了JQuery利用FormData實(shí)現(xiàn)異步提交數(shù)據(jù)文件的方法,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
一:jquery.js中的$.ajax方法
此方法依賴jquery.js插件,有很多版本,可以自己下載。
我們需要在此$.ajax方法中指定一些參數(shù),比如請(qǐng)求地址、請(qǐng)求類型、所需要傳輸?shù)臄?shù)據(jù)、請(qǐng)求成功后需要執(zhí)行的操作,這里簡略說一下。
$.ajax({ url:"你的url地址", type:'post', data:{key:'value'}, success:function(){ alert('成功'); } })
這是$.ajax方法的簡單用法。其中參數(shù)data是你要傳輸?shù)臄?shù)據(jù),這里的data支持Json對(duì)象和字符串。data數(shù)據(jù)如果是一個(gè)form表單里面的,自己寫一個(gè)json很慢,可以使用jquery里面的serizlize()方法。這個(gè)方法返回一個(gè)字符串(每個(gè)form表單提交的時(shí)候也是轉(zhuǎn)化為相同格式的字符串)。
$.ajax({ url:"你的url地址", type:'post', data:$('form').serialize(), // "id=asdasd&s=000&name=1233" success:function(){ alert('成功'); } })
那么,文件也是這樣提交的嗎?
對(duì)于文件的提交我們需要對(duì)$.ajax進(jìn)行一些特殊的設(shè)置,并且使用FormData的對(duì)象。
<input type="file" name="f" id="f" multiple>
var fd = new FormData(); fd.append("name", "bill"); fd.append("photo", $('#f')[0].files[0]); fd.append("photo2", $('#f')[0].files[1]); $.ajax({ url: '/webform1.aspx', type: 'post', processData: false, contentType: false, data: fd, success: function () { alert("ok") } })
我們創(chuàng)建一個(gè)fd對(duì)象并向其中添加鍵值對(duì),這個(gè)值可以是一個(gè)文件。$('#f')[0]是取出id=f的元素,至于為什么是[0],這是因?yàn)閖query對(duì)象都有一個(gè)默認(rèn)為0的索引用來取出其Dom元素,$('f')是一個(gè)jquery對(duì)象,[0]為Dom元素 可以用dom的所有屬性和方法。然后使用files來取出文件。這里我使用了files[0]和files[1],這是multiple可以上傳多個(gè)文件我這里上傳了兩個(gè)。
然后服務(wù)器就可以接收文件了,和表單一樣的接收方法。
當(dāng)然可以把一個(gè)form直接轉(zhuǎn)化為一個(gè)FormData對(duì)象,這樣我們可以避免把所需內(nèi)容一個(gè)個(gè)append到FormData里面。
var fd = new FormData(document.querySelector("form")); fd.append("CustomField", "This is some extra data"); $.ajax({ url: "stash.php", type: "POST", data: fd, processData: false, // 不處理數(shù)據(jù) contentType: false // 不設(shè)置內(nèi)容類型 });
使用append添加時(shí)formdata的key若已存在,則不能重復(fù)添加,會(huì)忽略本次append操作,這在對(duì)于使用經(jīng)常需要表單取出值是相當(dāng)不利的,所以建議使用set方法來添加新的key-value值,set的意思是修改一個(gè)已經(jīng)存在的鍵值對(duì),如果不存在的話就創(chuàng)建一個(gè)。即
fd.set("CustomField", "This is some extra data");
$.ajax是主動(dòng)事件,而我們希望當(dāng)用戶點(diǎn)擊按鈕才執(zhí)行,這里可以將$.ajax函數(shù)放在一個(gè)按鈕的click事件里面,也可以使用下面的方法。
$('form').submit(function{ // 你自己的代碼,一般是數(shù)據(jù)合法性驗(yàn)證 $.ajax({ }); return false; })
submit函數(shù)可以在表單被提交時(shí)執(zhí)行,我們可以用來將其作為執(zhí)行$.ajax函數(shù)的觸發(fā)事件,然后使用return false來提前阻止這個(gè)表單的提交。
注意:有些文章里說FormData的兼容問題,F(xiàn)ormData很早就提出來了。并且入股喲你想要使用jquery里面的ajax來傳輸文件就免不了使用它這是因?yàn)橄旅鎯蓚€(gè)方法也用到了FormData。當(dāng)然原生的ajax有直接傳輸文件的方法,感興趣的人可以看下。
上述內(nèi)容就是JQuery利用FormData實(shí)現(xiàn)異步提交數(shù)據(jù)文件的方法,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。