解决IE系列浏览器上传页面接收问题

引用:在网上看见一个说程序员的致命缺点中: 第四点就是大部分的程序员是一种信息囤积型的程序员,说直接一点就是狭隘,主要体现就是在知识的共享上面,非常害怕将知识全部告诉了别人,自己的存在价值就会大打折扣,这些主要是老员工居多,他们经常会隐藏代码,不愿意公布代码。小心翼翼地避免访问记录,也许这类的程序员很乐意告诉你他的工作是多么了不起,多么的厉害,但是如果你想要知道他的代码估计会很难。最终,他们注定要失败,这样的做事行为不被别人接受,存在也是没价值的.

在加上在网上 搜索资料的感受现将最近解决的一个IE方面的问题分享给大家.

技术分享:IE中上传文件时经常出现后台上传成功,但返回到前台的数据要么接收不到,要么提示下载json文件,在IE7及以上版本浏览器测试通过

在苦苦查询资料无果后终于在昨天突发灵感想到一种解决方法,试了一下在IE系列浏览器上面都可以使用操作也非常的简单,现将代码和实现方法记录下来分享给大家.

在java后台中在存储完文件后返回到前端的信息使用HttpServletResponse response直接写在流里面,这样返回的数据就不会经过spring等前端框架处理,方法本身使用void即可不需要返回类型,因为经过处理后的返回类型导致在ie中不能正常接收到数据,而在前端ajax中也可以正常接收到数据,只不过接收到时json字符串,需要手动转换后就可以变成一个json数组.

java代码: public void writeJson(HttpServletResponse response,String msg) throws IOException {
ResultInfo info=new ResultInfo(true,msg);
JSONObject json=JSONObject.fromObject(info);
response.setContentType("text/html;charset=utf-8");//可以不用写
response.getOutputStream().write(json.toString().getBytes());
}

js代码:$.ajaxFileUpload({
  url:url,
  secureuri:false,  
    fileElementId:‘file‘,                        //文件选择框的id属性或者name名称
    dataType: ‘JSON‘,                                     //服务器返回的格式,可以是json  
    success: function (data, status) {
    data=$.parseJSON(data); 
    $("#servId").val(data.msg); 
  return true;
  },
  error:function(data, status, e){ 
            return false;
  }
});

在java代码中使用了一个对象将数据封装后转换为json进行写出,主要是因为在ajax中接收返回的数据有固定的格式,{"error_code":0,"msg":"5992","success":true}其中succes是在ajax系列接收中判定是否能够进入到success的关键,很多时候IE接收的数据如果没有这个属性就会进入到error中,所以在java代码中才会专门建一个对象用来封装数据.在其它非IE内核不会出现这种情况.如果需要返回一个已经存在的对象只要对象中没有error这个属性就能进入到success里面,所以在不一定非要按照我的代码写,java代码中对象主要是返回单个数据例如文件上传位置,id之类的.如果需要返回其它数据最好的选择是组成json字符串进行返回.

在js代码中由于接收到数据是一个字符串,需要将其转换成json对象后才可以正常使用.

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。