婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Ajax表單異步上傳文件實(shí)例代碼(包括文件域)

Ajax表單異步上傳文件實(shí)例代碼(包括文件域)

熱門標(biāo)簽:機(jī)器人電銷騙局揭秘 騰訊地圖標(biāo)注位置能用多久 越南河內(nèi)地圖標(biāo)注 地圖標(biāo)注項(xiàng)目怎么樣 個(gè)人怎樣在百度地圖標(biāo)注地名 ai機(jī)器人電銷資源 硅語(yǔ)電話機(jī)器人公司 云呼外撥網(wǎng)絡(luò)電話系統(tǒng) 超級(jí)大富翁地圖標(biāo)注

1.起因

做前臺(tái)頁(yè)面時(shí),需要調(diào)用WebAPI的Post請(qǐng)求,發(fā)送一些字段和文件(相當(dāng)于把表單通過(guò)ajax異步發(fā)送出去,得到返回結(jié)果),然后得到返回值判斷是否成功。

2.嘗試

先是嘗試了一下 "jQuery Form Plugin" ,這玩意就是的巨大的坑,實(shí)現(xiàn)他和jquery1.9.2兼容性就不是太好,好不容易把$.browser的問(wèn)題解決了,發(fā)現(xiàn)用他上傳文件得不到返回值。

$("#view").submit(
$("#view").ajaxSubmit({
type: "post",
url: "../api/Article/Add",
dataType: "json",
success: function (msg) {
console.log(msg);
},
error: function (msg) {
$("#resultBox").html("連接服務(wù)器失敗");
console.log(msg);
}
})
);

比如上面的代碼,不過(guò)怎么配置,只要上傳了文件,success里面返回的msg一定是null(chromium瀏覽器下),但實(shí)際是有返回值的,而且沒(méi)有文件時(shí)也是正常的。更可怕的是IE/EDGE下提示下載那個(gè)Json返回值。

翻了一下jquery.form.js的源代碼,發(fā)現(xiàn)他是用Iframe實(shí)現(xiàn)的偽Ajax,不清真,Pass!

// are there files to upload?
var files = $('input:file', this).fieldValue();
var found = false;
for (var j=0; j  files.length; j++)
if (files[j]) 
found = true;
if (options.iframe || found) // options.iframe allows user to force iframe mode
fileUpload();
else
$.ajax(options);

這是有無(wú)文件時(shí),分別調(diào)用2個(gè)不同的函數(shù)。

3.解決方案

經(jīng)過(guò)多反調(diào)查,發(fā)現(xiàn)xhr(XMLHttpRequest)是個(gè)好東西。經(jīng)過(guò)測(cè)試主流瀏覽器和手機(jī)瀏覽器都支持這個(gè)東西。下面介紹一下在jquery/zepto的ajax 獲取原生XMLHttpRequest 對(duì)象上傳表單(文件)的方法。參考文章:https://www.jb51.net/article/91267.htm

function AjaxForm(formID, options) {
var form = $(formID);
//將form對(duì)象直接作為參數(shù) new FormData對(duì)象
var formData = new FormData(form[0]);
$("input[type='file']").forEach(function (item, i) {
//獲取file對(duì)象 即相當(dāng)于可以直接post的$_FILES數(shù)據(jù)
var domFile = $(item)[0].files[0];
//追加file 對(duì)象
formData.append('file', domFile);
})
if (!options)options = {};
options.url = options.url ? options.url : form.attr("action");
options.type = options.type ? options.type : form.attr("method");
options.data = formData;
options.processData = false; // tell jQuery not to process the data
options.contentType = false; // tell jQuery not to set contentType
options.xhr = options.xhr ? options.xhr : function () {
//這是關(guān)鍵 獲取原生的xhr對(duì)象 做以前做的所有事情
var xhr = $.ajaxSettings.xhr();
xhr.upload.onload = function () {
console.log("onload");
}
xhr.upload.onprogress = function (ev) {
if (ev.lengthComputable) {
var percent = 100 * ev.loaded / ev.total;
console.log(percent, ev)
}
}
return xhr;
};
options.success = options.success ? options.success : function (data) {
alert(data)
};
$.ajax(options);
}
//調(diào)用
$("#sub").click(function (e) {
AjaxForm("#myForm");
});

以上所述是小編給大家介紹的Ajax表單異步上傳文件實(shí)例代碼(包括文件域),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • ajax實(shí)現(xiàn)異步文件或圖片上傳功能
  • ajax圖片上傳,圖片異步上傳,更新實(shí)例
  • ajax 異步上傳帶進(jìn)度條視頻并提取縮略圖
  • Ajax異步文件上傳與NodeJS express服務(wù)端處理
  • Ajax異步上傳文件實(shí)例代碼分享
  • ajax實(shí)現(xiàn)文件異步上傳并回顯文件相關(guān)信息功能示例
  • jquery中的ajax異步上傳
  • 表單上傳功能實(shí)現(xiàn) ajax文件異步上傳
  • ajax異步實(shí)現(xiàn)文件分片上傳實(shí)例代碼

標(biāo)簽:海南 鄭州 洛陽(yáng) 林芝 內(nèi)蒙古 舟山 邢臺(tái) 遼源

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Ajax表單異步上傳文件實(shí)例代碼(包括文件域)》,本文關(guān)鍵詞  Ajax,表單,異步,上傳,文件,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Ajax表單異步上傳文件實(shí)例代碼(包括文件域)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Ajax表單異步上傳文件實(shí)例代碼(包括文件域)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 淮南市| 中山市| 巴林左旗| 祁阳县| 新绛县| 石柱| 桑植县| 盐边县| 凤城市| 科尔| 化德县| 浏阳市| 宁德市| 德安县| 洛南县| 镇坪县| 建阳市| 玛多县| 广昌县| 三门县| 马山县| 禄劝| 禹城市| 武定县| 卢湾区| 鸡东县| 固安县| 彰武县| 藁城市| 英吉沙县| 兴义市| 河源市| 桐柏县| 杂多县| 团风县| 台东县| 唐山市| 柳林县| 秭归县| 营山县| 油尖旺区|