为兼容较旧的jQuery插件,我把jQuery版本号从2.1.x降到了1.8.x,这比加入jquery-migration插件要来得干脆。
我没把这两个版本号的的区别一一记下来,而是直接改个版本号号。降级之后页面没有报错,我也就觉得没问题。直到有一天发现数据库非常多用户生成内容乱码了。
通过一番调试,原因找到了:jQuery ajax使用的http方法,1.9.0之前用选项type指定。而1.9.0及之后用选项method(选项type为method的别名)指定:
//from jquery 1.9.0
jQuery.ajax("/action",{
method:"POST"
});
//before jquery 1.9.0
jQuery.ajax("/action",{
type:"POST"
});
当把jQuery版本号从2.1.x降到了1.8.x时,以下的代码就隐藏着一个bug,不报错但非常致命:
jQuery.ajax("/action",{
method:"POST" //buggy
});
原因是jQuery 1.8.x不认选项method,意味着jQuery终于的决定使用的http方法会是默认的"GET"
当出现乱码时。首先可能会确定服务端的字符解码有没有问题,即使服务端字符解码设置已经稳稳地应用在其它非常多项目中。
bug显露出来了,kill掉即可。但这期间bug造成的数据库不少用户生成数据乱码怎么办。承认技术失误并向用户道歉?
非常久曾经听说有软件能够将乱码恢复成正常文本,这说明恢复还是有希望的。现已知乱码是因未对URI进行解码造成的,因此解码之后应该就能恢复成正常文本。
照着这样的思路我把乱码内容复制出来做了个測试:
decodeURIComponent(escape("一直想买一个,å¯æƒœæ²¡æœ‰ç±³å•Š•Š"))
居然能够恢复出正常文本!
于是写了个小程序,从数据库查出乱码内容。再将其恢复成正常文本。最后写回数据库。
有时候降级不只改个版本号号那么简单,一些代码得跟着同步调整。