spring mvc ajax上传文件 避免IE返回JSON出现下载文件

最近遇到一个极为头疼的事情:
使用jquery.form.js (version: 3.51.0)异步提交表单,上传文件,表单<form id="accountForm" action="xx" method="POST" enctype="multipart/form-data">...</form>
在google里面能够正常使用,但是测试ie8时,进入后台,文件上传成功,@responseBody 返回一个map时,ie8提示下载文件,并没有进入ajax回调函数。

遇到类同问题,请往下继续阅读。


经过文档查询,综合整理,多次尝试,终于解决了这个问题,记录下,大家共同进步。


解决步骤:(请各位仔细对比)


1.修改配置
注释掉<mvc:annotation-driven /> 。没有配置这个,就可以忽略当前步骤。


2.修改配置
<bean id="annotationMethodHandlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
	<property name="messageConverters">  
		<list>  
			<ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->  
		</list>  
	</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
		<!--防止ie8出现下载,mvc:annotation-driven注释掉,需要把text/json提到最前面,默认返回json,以免所有ajax设置dataType:json   -->
                <value>text/json;charset=UTF-8</value>
                <value>text/html;charset=UTF-8</value>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
</bean>


3.修改javascript

$("#Form").ajaxSubmit({
	type : "POST",
	dataType : $.isIE() ? "text" : "json",
	success : function(data) {
		if (typeof (data) == "string") {
			//ie会进入这里
			data = JSON.parse(data);//或者data = eval("(" + data + ")");
		}
		alert(data.status);
		//后面的代码按各自逻辑来。
	}
});



注意:

1.第三步使用ajaxSubmit依赖jquery.form.js,不同jquery.js $.ajax()不能实现异步上传文件。

2.第三步 $.isIE() 判断浏览器是否是IE浏览器,代码:

$.isIE = function(){
	return !!window.ActiveXObject || "ActiveXObject" in window;
}
3.第三步回调中,使用了data = JSON.parse(data);,是因为,当代码在IE中运行,提交使用的是dataType:'text',即便后台返回的是json,但是这里回调得到的data依然是一个字符串,因此需要把data转为json。google中,回调得到的data已经是json,而非字符串,所以这里不会进入if(){}语句。

4.第二步中<value>text/json;charset=UTF-8</value>配置建议放最前面,否则,使用$.ajax,不配置dataType时,回调得到的是字符串。配置dataType:'json'回调得到的才是json。放最前面,则未配置dataType时,回调得到的依然是json


望各位同行通过我这篇总结,能解决遇到的这个问题。文字冗余,见谅!

猜你喜欢

转载自blog.csdn.net/yqwang75457/article/details/65630969