问题1:
IE8下上传完文件后,对后台返回的JSON格式的数据,浏览器提示了下载该文件。
原因是因为IE8还不支持'application/json"类型的响应。
解决方法将后台返回的JSON数据以文本的形式返回,再在前台将文本解析成JSON格式。
代码如下:
Controller:
@RequestMapping(value="/doImport",method={RequestMethod.POST},produces = "text/html;charset=UTF-8") @ResponseBody public String doImport(HttpServletRequest request,HttpSession session){ //TODO doImport; }
注解里返回值转成了文本形式,并指定了编码,避免乱码。
js:
$("#uploadForm").ajaxSubmit({ url: "doImport", type: "POST", clearForm :true, dataType : "text", success: function (data) {
data = eval('(' + data + ')');
// TODO doSomething
} });
问题二:当没有选择文件时,chrome和IE8的在后台接受到的数据也有所不同
正常选择文件上传时IE8:
不存在文件时 IE8:
这里我们上传的文件是excel,我们可以看到是否有文件上传时contentType是不同的,当没有文件上传时,显示为一个流文件。
再看chrome的表现:
正常上传时和IE8一致:
没有选择文件时:
得到的对象是一个null。
因此我们不能简单的判断对象是否为空来确定是否有文件,还要根据MulipartFile的isEmpty方法来确定