上个项目出去已经有2个月了,项目的UI我不参与Coding,只是出现问题的时候我去给救救火。
现在回顾下遇到的比较奇葩的问题吧。
我们的UI要支持IE8以上,Firefox, chrome具体什么版本我也忘记了,反正至少是要支持HTML5的版本吧。
1. IE11下页面不改变
跟踪之后发现连请求都没有发,怎么可能。我们发请求的是Ajax所以想到是可不可以从ajax入手,因为让客户去改动什么东西总是不好的。
最后发现Ajax在IE11下缓存了,请求,有一个能用的方法是每个请求后面加上一个唯一的ID,好欺骗IE每次请求数据的URL都是新的,但是天啊,我们那么多地方都发请求,全改一遍,项目也基本稳定了,太伤了,后来发现ajax已经有这方面的设置了。
$.ajax({ cache: false, //other options... });
2. FireFox debug打开的时候总提示not-well-formed。
最开始想到的是json格式的问题,我们在chrome和IE没有出现这个提示,以为是他们对json数据的验证没有firefox严格,所以把返回的数据贴到IDE中format后一个个看,没有发现任何问题,于是可以想到的时候firefox有什么设置可以做到不出现这些错误,最后发现了firefox有对返回头和数据对比的习惯,所以就找到说是可以在jsp中设置content type = "application/json" 来避免这个问题,但是我们有很多个JSP文件而且之前看过那么多项目也很少会看到在页面设置这样的代码。于是就继续看有没有更加简单的方法,后来我们找到了。
在servlet 的filter中做处理,下面是doFilter的最简单方法。
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
//Add this to avoid firefox's giving error "not-well formed"
res.setContentType("application/json");
chain.doFilter(req, res);
}
3.如何在项目中用多个不同的Jquery版本。
随着项目越来越复杂,各种包的引用也越来越多,我们就遇到了用多个Jquery版本的问题。
好在Jquery已经考虑到这方面的问题了。var $jq = $.noConflict(true);就是一个解决方案。
项目代码太多,下面例子来自网上
<script src="jquery-1.5.js"></script>
<script src="jquery-1.11.js"></script>
<script>
// 现在window.$和window.jQuery是1.11版本:
console.log($().jquery); // => '1.11.0'
var $jq = jQuery.noConflict(true);
// 现在window.$和window.jQuery被恢复成1.5版本:
console.log($().jquery); // => '1.5.0'
// 可以通过$jq访问1.11版本的jQuery了
</script>
<script src="myscript.js"></script>