-
-
Save optikalefx/4504947 to your computer and use it in GitHub Desktop.
| // Ajax File upload with jQuery and XHR2 | |
| // Sean Clark http://square-bracket.com | |
| // xhr2 file upload | |
| $.fn.upload = function(remote, data, successFn, progressFn) { | |
| // if we dont have post data, move it along | |
| if (typeof data != "object") { | |
| progressFn = successFn; | |
| successFn = data; | |
| } | |
| var formData = new FormData(); | |
| var numFiles = 0; | |
| this.each(function() { | |
| var i, length = this.files.length; | |
| numFiles += length; | |
| for (i = 0; i < length; i++) { | |
| formData.append(this.name, this.files[i]); | |
| } | |
| }); | |
| // if we have post data too | |
| if (typeof data == "object") { | |
| for (var i in data) { | |
| formData.append(i, data[i]); | |
| } | |
| } | |
| var def = new $.Deferred(); | |
| if (numFiles > 0) { | |
| // do the ajax request | |
| $.ajax({ | |
| url: remote, | |
| type: "POST", | |
| xhr: function() { | |
| myXhr = $.ajaxSettings.xhr(); | |
| if(myXhr.upload && progressFn){ | |
| myXhr.upload.addEventListener("progress", function(prog) { | |
| var value = ~~((prog.loaded / prog.total) * 100); | |
| // if we passed a progress function | |
| if (typeof progressFn === "function") { | |
| progressFn(prog, value); | |
| // if we passed a progress element | |
| } else if (progressFn) { | |
| $(progressFn).val(value); | |
| } | |
| }, false); | |
| } | |
| return myXhr; | |
| }, | |
| data: formData, | |
| dataType: "json", | |
| cache: false, | |
| contentType: false, | |
| processData: false, | |
| complete: function(res) { | |
| var json; | |
| try { | |
| json = JSON.parse(res.responseText); | |
| } catch(e) { | |
| json = res.responseText; | |
| } | |
| if (typeof successFn === "function") successFn(json); | |
| def.resolve(json); | |
| } | |
| }); | |
| } else { | |
| def.reject(); | |
| } | |
| return def.promise(); | |
| }; |
How can i use it for multiple file input element such as name="fupload[]" ?
I would also like to know how to use this script to upload multiple files at once like name = file[].
nice one & + 100 to select multiples files at once but sending them one by one
you should tell us the min. version of jquery that is compatible with , i try it with jquery 1.4.3 it is not working !! however it works with last version of jquery
is there any solution instead of upgrading jquery :)
This handles multiple file fields now.
Thanks, really appreciate this, it works well! Hopefully I will be able to do this myself soon!
May this is an stupid question... but I'm trying to use your js file... adding a reference in my code:
<script src="js/XHR2.js"><script> But it brokes my page, I can't render the existing html... Did I something wrong?tks for this
Thank you very much. It worked perfectly.
Hello sir, Can I send few more data in file upload along with the image?
Ö
THANK YOU VERY MUCH MAN! you save my day lol.