您的位置:首页 > Web前端 > JavaScript

Microsoft JScript 运行时错误: 缺少对象,原因分析

2010-11-17 01:13 281 查看
今天接到一个任务,原因是一个不知道的jsp页面,在点击关闭一个div面板时发生错误:

Microsoft JScript 运行时错误: 缺少对象,原因分析

然后百度了一番, 是某处的JavaScript代码有问题,检查<head></head>中的script代码语法,一定是这里出了问题,是某个对象没有在这段代码中定义导致。

将信将疑,仔细搜寻一番,最后果然发现了问题。是因为关闭div的方法没有添加进去。修改完毕,终于正确了。

大概理了下思路,先定位错误的页面,然后定位错误发生的地方,看是什么操作引发的错误,然后一步步分析最终问题的所在。

===========================================

另外有一个疑惑,就是jsp中全局变量的声明问题。

使用jsp页面中<%! %>全局变量声明遇到的问题

一般喜欢把页面里多处要用到的变量设置成全局变量,如:

当把该变量赋值后,再次访问该页面时,该变量的值依然保存。这使得想通过用全局变量接受提交的参数时会受到一些迷惑:

if(request.getParameter("operation")!=null)
ID = request.getParameter("operation").trim();

当ID在前一次赋过初值后,因为另一种原因而再次访问该页面但‘operation'参数为空时,本来希望ID也为空,但实际上ID的值为上次访问该页面时赋的值。当希望通过ID的值做不同的操作时可能引起操作类型的混乱。

原因:使用<%! %>定义的变量编译成servlet后成为servlet的私有成员变量,在servlet环境中,对于一个JSP页只允许有一个结果servlet的实例在运行和响应所有的页面请求。因此,在结果servlet中所有的成员变量可以被所有的请求所共享,所以只要成员变量没有重新赋值,下次访问该页面时仍然不变。而在<% %>中定义的变量编译成servlet后成为service()方法的一个本地变量,而service()方法中的本地变量只能每响应一次请求就重建一
次。

解决的办法是将ID用<% %>定义,或在判断ID的操作后重新对ID初始化。

自己添加的内容为:

<%!
//设置全局变量
int i=0;
%>
<%
response.setHeader("refresh","1");
%>
<h1><%=++i%></h1>

该页面若编译成功后生成Servlet文件,全局变量i就会被所有客户的请求所共享,即客户端每进行一次请求,变量i就会加1。

当修改了*.jsp文件后,再次在客户端进行访问,这时全局变量i就又从0开始变化了。

全局变量和 page,request,session.application中的application变量类似。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐