JQuery基于FormData異步提交數(shù)據(jù)文件
web中數(shù)據(jù)提交事件是常常發(fā)生的,但是大多數(shù)情況下我們不希望使用html中的form表單提交,因?yàn)閒orm表單提交會中斷當(dāng)前瀏覽器的操作并且會調(diào)到另一個地址(即使這個地址是當(dāng)前頁面),并且會重復(fù)加載一些html浪費(fèi)帶寬,我們希望達(dá)到一個無刷新的、異步的提交效果來給用戶更好的體驗(yàn),這時候就要使用ajax,ajax可以不依賴表單自行發(fā)起一次http請求并且取回服務(wù)器響應(yīng)的數(shù)據(jù),這就是ajax的簡便之處。我們這里使用JQuery中封裝好的ajax函數(shù),更加簡便。下面列舉幾個使用ajax異步提交數(shù)據(jù)的方法。
一:jquery.js中的$.ajax方法
此方法依賴jquery.js插件,有很多版本,可以自己下載。
我們需要在此$.ajax方法中指定一些參數(shù),比如請求地址、請求類型、所需要傳輸?shù)臄?shù)據(jù)、請求成功后需要執(zhí)行的操作,這里簡略說一下。
$.ajax({
url:"你的url地址",
type:'post',
data:{key:'value'},
success:function(){
alert('成功');
}
})
這是$.ajax方法的簡單用法。其中參數(shù)data是你要傳輸?shù)臄?shù)據(jù),這里的data支持Json對象和字符串。data數(shù)據(jù)如果是一個form表單里面的,自己寫一個json很慢,可以使用jquery里面的serizlize()方法。這個方法返回一個字符串(每個form表單提交的時候也是轉(zhuǎn)化為相同格式的字符串)。
$.ajax({
url:"你的url地址",
type:'post',
data:$('form').serialize(), // "id=asdasd&s=000&name=1233"
success:function(){
alert('成功');
}
})
那么,文件也是這樣提交的嗎?
對于文件的提交我們需要對$.ajax進(jìn)行一些特殊的設(shè)置,并且使用FormData的對象。
<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)建一個fd對象并向其中添加鍵值對,這個值可以是一個文件。$('#f')[0]是取出id=f的元素,至于為什么是[0],這是因?yàn)閖query對象都有一個默認(rèn)為0的索引用來取出其Dom元素,$('f')是一個jquery對象,[0]為Dom元素 可以用dom的所有屬性和方法。然后使用files來取出文件。這里我使用了files[0]和files[1],這是multiple可以上傳多個文件我這里上傳了兩個。
然后服務(wù)器就可以接收文件了,和表單一樣的接收方法。
當(dāng)然可以把一個form直接轉(zhuǎn)化為一個FormData對象,這樣我們可以避免把所需內(nèi)容一個個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添加時formdata的key若已存在,則不能重復(fù)添加,會忽略本次append操作,這在對于使用經(jīng)常需要表單取出值是相當(dāng)不利的,所以建議使用set方法來添加新的key-value值,set的意思是修改一個已經(jīng)存在的鍵值對,如果不存在的話就創(chuàng)建一個。即
fd.set("CustomField", "This is some extra data");
$.ajax是主動事件,而我們希望當(dāng)用戶點(diǎn)擊按鈕才執(zhí)行,這里可以將$.ajax函數(shù)放在一個按鈕的click事件里面,也可以使用下面的方法。
$('form').submit(function{
// 你自己的代碼,一般是數(shù)據(jù)合法性驗(yàn)證
$.ajax({
});
return false;
})
submit函數(shù)可以在表單被提交時執(zhí)行,我們可以用來將其作為執(zhí)行$.ajax函數(shù)的觸發(fā)事件,然后使用return false來提前阻止這個表單的提交。
注意:有些文章里說FormData的兼容問題,F(xiàn)ormData很早就提出來了。并且入股喲你想要使用jquery里面的ajax來傳輸文件就免不了使用它這是因?yàn)橄旅鎯蓚€方法也用到了FormData。當(dāng)然原生的ajax有直接傳輸文件的方法,感興趣的人可以看下。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JQuery+EasyUI輕松實(shí)現(xiàn)步驟條效果
jQuery EasyUI 提供易于使用的組件,它使 Web 開發(fā)人員能快速地在流行的 jQuery 核心和 HTML5 上建立程序頁面。通過本文給大家介紹JQuery+EasyUI輕松實(shí)現(xiàn)步驟條效果,需要的朋友參考下2016-02-02
jQuery實(shí)現(xiàn)table表格信息的展開和縮小功能示例
這篇文章主要介紹了jQuery實(shí)現(xiàn)table表格信息的展開和縮小功能,涉及jQuery事件響應(yīng)及頁面元素遍歷、屬性修改相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
JQuery實(shí)現(xiàn)倒計(jì)時按鈕具體方法
頁面中需要實(shí)現(xiàn)某個按鈕點(diǎn)擊完后,禁用它,并顯示倒計(jì)時。這個默認(rèn)是3秒,代碼如下2013-11-11
jQuery利用DOM遍歷實(shí)現(xiàn)商城結(jié)算系統(tǒng)實(shí)戰(zhàn)
這篇文章主要介紹了jQuery利用DOM遍歷實(shí)現(xiàn)商城結(jié)算系統(tǒng)實(shí)戰(zhàn),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具一定的參考價值,感興趣的小伙伴可以參考一下2022-06-06

