- 注册
- 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大叔。
事情起由是这样的,有一段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大叔。