使用ajaxFileUpload.js插件实现ajax无刷新上传文件
demo:参见localhost下的ajaxiframe目录
错误处理:
(1)无刷新上传文件报错(jQuery.handleError is not a function)
a.handlerError只在jquery-1.4.2之前的版本中存在,jquery-1.6 和1.7中都没有这个函数了。
b.如果返回的dataType: "json", 是json格式的,则还需要添加httpData方法。
因此在jquery高级版本中将这个函数添加上 ,问题解决。
在ajaxFileUpload.js在 jQuery.extend添加以下代码:
jQuery.extend({
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]);
}
},
httpData: function (xhr, type, s) {
var ct = xhr.getResponseHeader("content-type"),
xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
data = xml ? xhr.responseXML : xhr.responseText;
if (xml && data.documentElement.tagName == "parsererror")
throw "parsererror";
if (s && s.dataFilter)
data = s.dataFilter(data, type);
if (typeof data === "string") {
if (type == "script")
jQuery.globalEval(data);
if (type == "json")
data = window["eval"]("(" + data + ")");
}
return data;
}
});
(2) SyntaxError: syntax error in ajaxFileUpload jquery plugin
这个是返回格式的问题,如果dataType: "json",ajax处理那端也要是json格式
jquery ajaxFileUpload.js 插件在IE9中的bug修复
在ajaxfileupload.js中找到如下代码: [javascript] if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />'); if(typeof uri== 'boolean'){ io.src = 'javascript:false'; } else if(typeof uri== 'string'){ io.src = uri; } } 将上面的代码修改为: [javascript] if(window.ActiveXObject) { if(jQuery.browser.version=="9.0") { io = document.createElement('iframe'); io.id = frameId; io.name = frameId; } else if(jQuery.browser.version=="6.0"||jQuery.browser.version=="7.0"||jQuery.browser.version=="8.0") { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />'); if(typeof uri== 'boolean'){ io.src = 'javascript:false'; } else if(typeof uri== 'string'){ io.src = uri; } } } 这样,ajaxFileUpload在IE9中就支持文件的上传了