| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- jQuery.extend({
- createUploadIframe: function(id, uri) {
- var frameId = "jUploadFrame" + id;
- var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"';
- if (window.ActiveXObject) {
- if (typeof uri == "boolean") {
- iframeHtml += ' src="' + "javascript:false" + '"'
- } else {
- if (typeof uri == "string") {
- iframeHtml += ' src="' + uri + '"'
- }
- }
- }
- iframeHtml += " />";
- jQuery(iframeHtml).appendTo(document.body);
- return jQuery("#" + frameId).get(0)
- },
- createUploadForm: function(id, fileElementId, data) {
- var formId = "jUploadForm" + id;
- var fileId = "jUploadFile" + id;
- var form = jQuery('<form action="" 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 oldElement = jQuery("#" + fileElementId);
- var newElement = jQuery(oldElement).clone();
- jQuery(oldElement).attr("id", fileId);
- jQuery(oldElement).before(newElement);
- jQuery(oldElement).appendTo(form);
- jQuery(form).css("position", "absolute");
- jQuery(form).css("top", "-1200px");
- jQuery(form).css("left", "-1200px");
- jQuery(form).appendTo("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 frameId = "jUploadFrame" + id;
- var formId = "jUploadForm" + 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(frameId);
- 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).unbind();
- 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);
- jQuery(form).attr("method", "POST");
- jQuery(form).attr("target", frameId);
- 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("#" + frameId).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") {
- ////////////以下为新增代码///////////////
- data = r.responseText;
- var start = data.indexOf(">");
- if(start != -1) {
- var end = data.indexOf("<", start + 1);
- if(end != -1) {
- data = data.substring(start + 1, end);
- }
- }
- ///////////以上为新增代码///////////////
- eval("data = " + data)
- }
- if (type == "html") {
- jQuery("<div>").html(data).evalScripts()
- }
- 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])
- }
- },
- });
|