从昨天晚上8:30开始就为xx的一个财税分析页面调试bug.直到现在才解决了问题.
环境是这样的:
页面(IE)使用buffalo调用后台函数.很简单的一个通讯过程。
代码上似乎没有什么可疑之处——直接copy以前的成功代码。页面form里有input,button,select,checkbox四种类型几十个元素。使用Buffalo.Form.formToBean()将form序列化成map传递到后台。
按钮一点击,bug就出现了!后台抛出异常,显示map是空的。
我开始对这bug进行分析,希望找出问题所在。
1,首先确认bug,执行一遍,问题依旧。通过eclipse debug,确认了后台的map确实为空,所以bug在页面上。
2,分析页面代码,代码实在太简单,怎么看也不会有问题。通过几次修改测试后确认问题不在页面代码里。
3,这样bug只可能在buffalo里面了。于是打开buffalo.js开始查看formToBean函数。
可怜的javascript,只能通过alert来一步步确认bug的位置,于是我写了个div来接收调试信息,而每次还要用CTRL+F5强制刷新页面 (老是担心没有刷新),通过十几分钟的测试,终于把问题锁定到form.elements数组的循环上了,alert显示 form.elements.length是一个【Object】,而按理是int。这个时候已经过去1个小时,收拾收拾准备回家了。但回家之前我在我的 电脑用firefox测试了一遍,发现bug诡异消失,提交正常!肯定是firefox与ie实现上的差异!曙光就在眼前了。
4,第二天上班,9:27开始重新考虑昨天的问题。
先用firefox分析,查看了dom树结构,看起来一切正常。然后回到IE,回想昨天调试的难度,看来应该找个插件来调试。——google到了http://www.ieinspector.com/ ,安装,可惜不能像firefox查看dom的方式那样显示元素。不过还是很强!我尝试着执行了这样一段javascript: document.forms.form.elements.length
立刻真相大白!

【2007-8 bbs】
作者记录了一次在IE浏览器中遇到的财税分析页面bug调试经历。该bug导致后台接收到的数据为空,经过逐步排查,最终定位到IE与Firefox在处理form.elements.length上的差异。
711

被折叠的 条评论
为什么被折叠?



