Home > Web Front-end > JS Tutorial > Ajax form asynchronous file upload example code

Ajax form asynchronous file upload example code

亚连
Release: 2018-05-23 14:58:25
Original
1374 people have browsed it

This article mainly introduces the example code of Ajax form asynchronous uploading of files (including file fields). It is very good and has reference value. Friends who are interested should read it together

1. Cause

When making a front-end page, you need to call the Post request of WebAPI, send some fields and files (equivalent to sending the form asynchronously through ajax, and get the return result), and then get The return value determines whether it is successful.

2. Try

#First I tried "jQuery Form Plugin", this thing is a huge pit, realize it The compatibility with jquery1.9.2 is not very good. I finally solved the problem of $.browser, but found that I can’t get the return value when uploading files using it.

$("#view").submit(
$("#view").ajaxSubmit({
type: "post",
url: "../api/Article/Add",
dataType: "json",
success: function (msg) {
console.log(msg);
},
error: function (msg) {
$("#resultBox").html("连接服务器失败");
console.log(msg);
}
})
);
Copy after login

For example, the above code, but how to configure it, as long as the file is uploaded, the msg returned in success must be null (under chromium browser) , but there is actually a return value, and it is normal when there is no file. What's even more frightening is the Json return value when prompted to download under IE/EDGE.

I looked through the source code of jquery.form.js and found that it is a pseudo-Ajax implemented using Iframe. It is unclear. 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);
Copy after login

These are two different functions that are called when there is a file or not.

3. Solution

After many anti-investigations, it was found that xhr (XMLHttpRequest) is a good thing. After testing, both mainstream browsers and mobile browsers support this thing. The following introduces the method of obtaining the native XMLHttpRequest object to upload the form (file) in jquery/zepto's ajax.

function AjaxForm(formID, options) {
var form = $(formID);
//将form对象直接作为参数 new FormData对象
var formData = new FormData(form[0]);
$("input[type=&#39;file&#39;]").forEach(function (item, i) {
//获取file对象 即相当于可以直接post的$_FILES数据
var domFile = $(item)[0].files[0];
//追加file 对象
formData.append(&#39;file&#39;, 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 () {
//这是关键 获取原生的xhr对象 做以前做的所有事情
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);
}
//调用
$("#sub").click(function (e) {
AjaxForm("#myForm");
});
Copy after login

The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.

Related articles:

Cascade operation of drop-down menu

Ajax realizes three-level cascade of provinces and municipalities

Simple application based on Ajax form submission and background processing

##

The above is the detailed content of Ajax form asynchronous file upload example code. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template