ajaxfileupload不兼容ie8

前端之家收集整理的这篇文章主要介绍了ajaxfileupload不兼容ie8前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文:http://www.oschina.net/question/820519_231913

在IE8浏览器下,我使用ajaxfileupload在页面上传文件,但是每当我点击上传的时候,页面都会跳出一个对话框,说“要下载json文件”,文件的名字是我要上传图片提交到的action的。

调试查看ajaxfileupload源码后发现,返回的消息头没数据。故百度了下找到解决方


我的后端是java springMVC

在ie8下面,使用@ResponseBody,IE8会返回一个json文件

要使用HttpServletResponse的response.getWriter().write("上传成功");这种格式返回。


//ie8必须设置返回的ContentType
response.setCharacterEncoding('utf-8');
response.setContentType("text/html");


序列化后,还要在string类型前后加上“<pre></pre>"标签

ObjectMapper objectMapper=new ObjectMapper();
String msg = "<pre>"+objectMapper.writeValueAsString(er)+"</pre>";
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
response.getWriter().write(msg);


另外一个问题,关于 jquery.handleerror 对象不支持

原文:点击打开链接

在做ajaxFileUpload时,我也遇到这个问题,同时还有其它的问题,用了一下午的时间解决了:
问题1:如楼主所说,jQuery.handleError is not a function 原因是,经测试handlerError只在jquery-1.4.2之前的版本中存在,jquery-1.6 和1.7中都没有这个函数了,因此在1.4.2中将这个函数复制到了ajaxFileUpload.js中,问题解决
handleError: function( s,xhr,status,e ) 		{
// If a local callback was specified,fire it
		if ( s.error ) {
			s.error.call( s.context || s,e );
		}

		// Fire the global callback
		if ( s.global ) {
			(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError",[xhr,s,e] );
		}
	},问题2:一直得到error ,无法执行指定的success方法。通过追踪ajaxFileUpload的执行过程发现,在调用它自身的uploadHttpData函数时,当执行if(type=="json")    eval("data = "+data);
会抛出异常,导致在处理异常的时候将status = "error" 因此一直执行error方法。
上网查询,得知eval函数是用来执行一段js代码,而并不是如我所想的反解json串
eval("data = "+data);的意思是 将data 赋值给 data参数 ,但是当我返回给页面的是一个简单的字符串,比如"OK" ,时,这样写就抛出异常。最后改为 eval("data = \" "+data+" \" ");即将返回的数据用双引号引起来当作字符串,然后赋给 data 。终于成功了。。。
贴出来,希望可以帮助到其他同样遇到这个问题的人。

猜你在找的Ajax相关文章