• 从2021年4月起,论坛网上药店重新开放!详情查看
  • 从2023年10月10日开始,华夏中医论坛启用备用域名tcmbe.com 详情查看
  • 关于论坛电子书等资源下载权限的说明!详情查看
  • 论坛官方2000人QQ群,欢迎加入!详情查看
  • 对所有可能涉及版权的资源,论坛均不再公开展示!详情查看

qq好友的日志

白头翁

声名远扬
正式会员
注册
2008/05/05
帖子
8808
获得点赞
68
声望
10
年龄
54
这个日志真有点不想写,但是浪费了我一下午和一晚上的时间来解决一个极其郁闷的问题,如果不写出来发泄一下真有点对不起自己。

事情起由是这样的,有一段JavaScript代码,具体是什么就不说了,在html页面中调试好了,copy放到asp.net页面来调用,于是就发生了下面事情:

首先,我把此代码做一个js文件,在aspx文件引用过来,结果在html页面能跑的代码竟然出现了错误;真是不可思议,同样的代码难道还会有问题?想应该不是代码问题,于是看onclick触发事件是不是有问题,因为用了汉字作为参数传入,这个汉字编码也是一个容易出问题的地方,于是改成英文、不用参数等等方法调试,不行!同样还是不行!

难道代码有问题吗?我明明是copy过来的。

想到以前做引用js文件的时候也出现过问题,是不是这里出问题了?于是不做js引用,直接把代码copy到aspx页面中,直接调用,奇迹出现,调试通过!

但是我什么都没改啊!这样太那个了吧!!本来想偷懒一下,这样子直接调用算了,但是看到这个JavaScript代码这么长放在页面里面似乎不是什么好事,还是想做一个js引用要好一点,而且我明明什么都没改竟然有可以了,说明代码还是没有问题的,于是改回做js引用。

真正郁闷的事情开始了

为了知道自己修改了哪些代码以及便于对照,将同样的js文件做了两个,然后在第二中修改调试,第一个不动。

于是使尽本领来调试,考虑到代码很长,于是先把涉及到参数传递的地方都静态解决,没用;凡是动态生成的地方都暂时用静态变量替换,还是没用;去掉一些函数,只留下几个关键的函数调用,还是没用;于是检查代码最后还是没用;真是没天理啊,真是搞不懂。

正在郁闷时无意中把题头的注释删掉了,再调试,真实奇迹,弹出了下拉框,唉,好了

松一口气,于是去吃饭。

还以为已经调试完毕,结果吃饭回来发现虽然能弹出下拉框了,但是点击下拉框里面的栏目没有事件响应,于是有进入调试。不过这次还好,知道问题已经锁定在这个下拉框里面事件响应里面。

于是针对这个函数,以及调用这个函数的代码进行调试,这真是一个艰难的过程.调试了很久很久都不见起色..

几乎所能想到的方法都用尽了.

难道真的是我水平太差了..

无奈了

于是想到开始吃饭之前把题头的注释去掉的时候能够弹出下拉框,难道跟注释有关系?????

万般无奈之下,把js文件中所有的注释都删除掉,奇迹出现!!!完全可以了!KAO,真是没天理啊!

我不信,于是按ctr+z键取消操作,再看,不行!看来真是注释的问题!

不会吧,调试我这么久,是因为注释!注释的内容在编译器里面是不会解析的啊,而且在html里面做js调用也没有问题的啊,虽然我的编译原理学的不咋地,难道要颠覆我的所学!!!

既然这样,干脆看看到底是那个注释有毛病!

于是用排除法一个个排除,当注释里面出现”//点击后“这三个字的时候,程序又不行了,继续排除,最后发现是这个汉字惹的祸,”后“,只要我把这个字加上,程序就不行,去掉,就OK。

太打击我智商了吧,调了我这么久,得到的竟然是这个结果

于是范伟和周星星的笑脸浮现了

晕了,苍天呀,这种问题也能让我遇上,我真应该去买彩票啊!





最后分析:可能是Microsoft同志做的东东有问题,真想要索赔。

如果有哪位能帮我再试试也可以,你把这个伟大的汉字”后“放到你js文件的注释里面,当然,你用的要是asp.net才行,你就会发现奇迹,如果没有发现请跟我联系啊。

注:我在vs2008里面调试的。



续:早上醒来,还是觉得里面肯定有蹊跷,于是再调试

问题终于找到,是编码问题。js默认是UTF-8编码,如果调用的时候不指定的话,默认用此编码,中文显示则会是乱码。

原因分析:

汉字在gb2312编码中一般占用两个字节,在UTF-8中汉字一般占3个字节,所以假设本来编码是0111 1011 而UTF-8的时候会再往后吃掉一个字节作为一个汉字,如果后面那个字节正好是回车,而回车后面正好接的是正式代码的话,那么这个回车的字节将被吃掉,被吃掉的结果就是导致第一行正式代码就被注释掉了,这就是原因所在。所以如果汉字后面放两个回车或者更多回车,则应该可以解决问题。于是按照这个思路,输入两个回车,程序果然正常了。

假设代码是:

//后
function List_do()

{}

正常字节表示是(假设,不一定正真是这么这样):(/)0101(/)0101(后)0111 0111(回车)0100 (后面正式代码了)1000 1000 . .

当用UTF-8的时候,下划线部分包括红色的回车部分被认为是一个汉字,那么正式代码前面没有回车符了,所以第一行代码实际上解析的时候被自动注释了。

这就是真正的原因。

解决办法:

1、偷懒法:将JavaScript代码直接放到aspx页面中调用,一省白省;

2、勤快法:中文注释后多敲几个回车;

3、终极法:在aspx页面中调用的时候时候指定字符集,如<script language="javascript" src="../js/list.js" type="text/javascript" charset="gb2312"></script>,这才是真正的解决办法。



最后结论:

还是我水平问题,不能怪Microsoft大叔。
 
感想:
1、学什么都不容易
2、苦乐相伴,乐在其中
 
呵呵呵 就是费得时间有点多……
 
后退
顶部