SpingMVC框架中,我们的controller常常会将数据保存在一个map中传回到前台页面,前台页面将其作为JSON数据处理,但在现实中,我们可能遇到这么一种情况:
我们上传了一张图片,调用后台的controller,返回给我们前台一个JSON数据,但结果IE帮我们默认下载这个数据,这明显不是我们想要的结果。此时有两个方案:
1、用高版本的浏览器
IE9以下版本的老浏览器很有可能会出现这样的错误。但现实中用低版本浏览器很可能是需求所致,所以这条方案常常是 不通过的。
2、修改你的返回值
如果你是用的Spring中的controller,之前你的调用的方法很可能是类似:
@RequestMapping(value = "commonfileupload", method = RequestMethod.POST)
@ResponseBody
public Object commonfileupload(@RequestParam(value="file") MultipartFile file,Model model) {
Map rs = new HashMap();
rs.put("result", "suc");
return rs;
}
现在你需要改成:
@RequestMapping(value = "commonfileupload", method = RequestMethod.POST)
public void commonfileupload(@RequestParam(value="file") MultipartFile file,Model model,
HttpServletRequest req, HttpServletResponse resp) {
String result = "{\"result\":\"suc\"}";
// 针对低版本的IE浏览器,必须使用这种格式
resp.setContentType("text/html");
try {
resp.getWriter().print(result);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
通过这种方式,将一个字符串传到前台,前台依旧可以以处理JSON数据的方式进行操作。
这是博主在使用ueditor时修改了其上传图片调用的后台方法,需要给出JSON数据的返回值让前台处理,但是项目要求必须使用低版本的IE浏览器,也就导致这个问题的产生。