解决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对象后才可以正常使用.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值