123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- jQuery.extend({
- createuploadiframe: function(id, url) {
- var iframeid = 'uploadiframe' + id;
- var iframe = '<iframe id="' + iframeid + '" name="' + iframeid + '"';
- if(window.ActiveXObject) {
- if(typeof url == 'boolean') {
- iframe += ' src="' + 'javascript:false' + '"';
- } else if(typeof url == 'string') {
- iframe += ' src="' + url + '"';
- }
- }
- iframe += ' />';
- jQuery(iframe).css({'position':'absolute', 'top':'-1200px', 'left':'-1200px'}).appendTo(document.body);
- return jQuery('#' + iframeid).get(0);
- },
- createuploadform: function(id, fileobjid, data) {
- var formid = 'uploadform' + id;
- var fileid = 'uploadfile' + id;
- var form = jQuery('<form method="post" name="' + formid + '" id="' + formid + '" enctype="multipart/form-data"></form>');
- if(data) {
- for(var i in data) {
- jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
- }
- }
- var oldobj = jQuery('#' + fileobjid);
- var newobj = jQuery(oldobj).clone();
- jQuery(oldobj).attr('id', fileid).before(newobj).appendTo(form);
- jQuery(form).css({'position':'absolute', 'top':'-1200px', 'left':'-1200px'}).appendTo(document.body);
- return form;
- },
- ajaxfileupload: function(s) {
- s = jQuery.extend({}, jQuery.ajaxSettings, s);
- var id = new Date().getTime();
- var form = jQuery.createuploadform(id, s.fileElementId, (typeof(s.data)=='undefined'?false:s.data));
- var io = jQuery.createuploadiframe(id, s.secureuri);
- var iframeid = 'uploadiframe' + id;
- var formid = 'uploadform' + id;
- if(s.global && ! jQuery.active++) {
- jQuery.event.trigger("ajaxStart");
- }
- var requestDone = false;
- var xml = {};
- if(s.global) {
- jQuery.event.trigger("ajaxSend", [xml, s]);
- }
- var uploadcallback = function(istimeout) {
- var io = document.getElementById(iframeid);
- try {
- if(io.contentWindow) {
- xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
- xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
- } else if(io.contentDocument) {
- xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
- xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
- }
- } catch(e) {
- jQuery.handleerror(s, xml, null, e);
- }
- if(xml||istimeout == 'timeout') {
- requestdone = true;
- var status;
- try {
- status = istimeout != 'timeout' ? 'success' : 'error';
- if(status != 'error') {
- var data = jQuery.uploadhttpdata(xml, s.dataType);
- if(s.success) {
- s.success( data, status );
- }
- if(s.global) {
- jQuery.event.trigger("ajaxSuccess", [xml, s]);
- }
- } else {
- jQuery.handleerror(s, xml, status);
- }
- } catch(e) {
- status = 'error';
- jQuery.handleerror(s, xml, status, e);
- }
- if(s.global) {
- jQuery.event.trigger("ajaxComplete", [xml, s]);
- }
- if(s.global && ! --jQuery.active) {
- jQuery.event.trigger("ajaxStop");
- }
- if (s.complete) {
- s.complete(xml, status);
- }
- jQuery(io).off();
- setTimeout(function() {
- try {
- jQuery(io).remove();
- jQuery(form).remove();
- } catch(e) {
- jQuery.handleerror(s, xml, null, e);
- }
- }, 100);
- xml = null;
- }
- }
- if(s.timeout > 0) {
- setTimeout(function() {
- if(!requestdone) {
- uploadcallback('timeout');
- }
- }, s.timeout);
- }
- try {
- var form = jQuery('#' + formid);
- jQuery(form).attr('action', s.url).attr('method', 'post').attr('target', iframeid);
- if(form.encoding) {
- jQuery(form).attr('encoding', 'multipart/form-data');
- } else {
- jQuery(form).attr('enctype', 'multipart/form-data');
- }
- jQuery(form).submit();
- } catch(e) {
- jQuery.handleerror(s, xml, null, e);
- }
- jQuery('#' + iframeid).load(uploadcallback);
- return {abort: function () {}};
- },
- uploadhttpdata: function(r, type) {
- var data = !type;
- data = type == 'xml' || data ? r.responseXML : r.responseText;
- if(type == 'script') {
- jQuery.globalEval(data);
- }
- if(type == "json") {
- eval("data = " + data);
- }
- if(type == "html") {
- jQuery("<div>").html(data);
- }
- return data;
- },
- handleerror: function(s, xhr, status, e) {
- if(s.error) {
- s.error.call(s.context || s, xhr, status, e);
- }
- if(s.global) {
- (s.context ? jQuery(s.context) : jQuery.event).trigger("ajaxError", [xhr, s, e]);
- }
- }
- });
|