最近做项目时,视图中用ajaxfileupload.js异步提交表单时,接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的json数据。
JS代码如下:
function importMember(dialogObj) { // 提交 $.ajaxFileUpload({ url: '${basepath}/memberManage/importMember', type: 'POST', secureuri: false, //一般设置为false fileElementId: 'importFile', // 上传文件的id、name属性名 dataType: 'json', //返回值类型,一般设置为json/application/text success: function(data, status) { if('true' == data.success){ // appoc.success("导入成功", handler, dialogObj); appoc.success("导入成功", null, null); } else { appoc.error("导入失败,请联系管理员"); } }, error: function(data, status, e) { appoc.error("导入失败,请联系管理员", null, null); } }); }
解决办法:
1. 在控制器中设置返回contentType为:text/html
protected void outObj2JsonString(HttpServletResponse response, Map<String, Object> obj) {
//将实体对象转换为JSON Object转换
String s = JSONObject.toJSONString(obj);
response.setContentType("text/html; charset=utf-8");
PrintWriter out = null;
try {
out = response.getWriter();
out.append(s);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
out.close();
}
}
}
2. 同时将前台JS数据类型设置为text,将将其转换为JSON格式
function importMember(dialogObj) { // 提交 $.ajaxFileUpload({ url: '${basepath}/memberManage/importMember', type: 'POST', secureuri: false, //一般设置为false fileElementId: 'importFile', // 上传文件的id、name属性名 dataType: 'text', //返回值类型,一般设置为json/application/text success: function(data, status) { eval(data); if('true' == data.success){ // appoc.success("导入成功", handler, dialogObj); appoc.success("导入成功", null, null); } else { appoc.error("导入失败,请联系管理员"); } }, error: function(data, status, e) { appoc.error("导入失败,请联系管理员", null, null); } }); }