springmvc开发过程当中遇到的奇怪浏览器问题

    最近我的开发一个小的OA项目,属于复习阶段.使用的技术主要是spring mvc做为前端框架,mybatis做为数据库持久化技术.前台使用jquery和一些jquery的插件.
    在开发到中间阶段时候发现本身好像忽略了一个小问题,整个项目一直在firefox下测试,没有在IE下测试,不肯定是否会出现兼容问题.因为jquery的天生兼容性良好,我就没有过多的关注.在项目接近收尾阶段,我开启了IE测试,不过此次发现确实存在了兼容性问题,并且问题很是严重.
    因为为了简便,我在提交表单的操做上采用jquery.form.js,这个组件.它提供了ajaxSubmit这个方法,可以进行异步表单提交,并在提交成功后,执行success函数.个人系统在一个表单页面既有普通的内容,也有file标签,进行文件上传的控制.springmvc的controller中须要写一段这样的代码:[code="java"]MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;[/code]这是为了将普通的httprequest转换为spring的request,进而获取文件流等信息.在ajaxSubmit这种提交请求下,firefox下面测试彻底正常,可以顺利上传,执行回调函数;可是若是在IE浏览器下面操做,这个位置会进行ClassCast类转换异常,一样也不会执行回调函数.并且,一些表单若是设置为[code="java"]enctype="multipart/form-data"[/code]这个属性,success回调函数也一样不能执行,并且在spring mvc的controller中,会将会穿页面的json字符串解析为要跳转的页面,不回传给ajax请求.也就说明ajax请求,在IE浏览器下,是不能进行文件上传操做的. 参数传递过程当中,在IE浏览器下也会发生乱码,并且火狐下仍是正常.
      根据debug日志分析,是IE下的请求头和firefox下的请求头发生了重大的区别.firefox是application/json,IE的比较长,application/x-Microsoft-....这就致使了,一系列的问题发生. 看来仍是浏览器的不兼容致使,并且短期内也没什么好办法去重构这个问题,只能采用分而治之的状况了,若是不须要上传的页面,还能够继续使用,可是enctype="multipart/form-data"这个属性必须去掉,否则会出现乱码和ajax回调函数不执行的状况.若是肯定须要上传的页面,最好仍是普通的表单提交,不然不兼容的话,实在没办法.
    除了要喷微软对于浏览器的兼容性没有计划以外,这个问题也给咱们敲响了一个警钟,测试要尽早作,不要最后作,不然风险很大,并且出现问题没法规避. 前端

相关文章
相关标签/搜索