2. js在jsp中的加载顺序
页面上的js代码时html代码的一部分,所以页面加载的时候是由上而下加载。所以js加载的顺序也就是页面中<script>标签出 现的顺序。<script>标签里面的或者是引入的外部js文件的执行顺序都是其语句出现的顺序,其中js执行的过程也是页面装载的一部分。
2.1 在js脚本中定义的全局变量和函数,都可以在后面的脚本中调用。变量的调用,必须是前面已经声明了的,否则变量返回的值是undefined。同一段脚本中,函数定义可以出现在函数的调用后面;若函数的定义和调用在两个脚本段中,函数调用在函数定义之前就会报函数未定义错误。
2.2 js中出现ajax的异步加载
由于ajax的异步加载可能会导致语句的执行顺序并不是按照语句的出现顺序来执行。下面以我做任务时遇到的问题为例:
在页面初始加载的时候需要向jsp发送请求来获得该页面所需的数据,在ajax成功函数中,对data的操作所需时间过长,就会导致在ajax函数 外面的confirm与loadTree比data操作后面的语句先执行。最终在loadTree中使用data的值得时候就为空,此时全局变量 openTab_Id就为空。
2.3控制js执行顺序
最好是单独写个文件夹,然后写个js文件放置然后在jsp页面通过<script src="js文件的相对地址">来导入。当然你写在<head>里也可以。最好能不写在页面里就不写在页面里。。实现一般都用外部js文件导入。一是分离开,方便修改。二是可以js代码复用。你想啊,只写在一个jsp里,如果我另一个要用怎么便????你复制过去吗???这个和java里的封装方法一个思想所以建议通过外部 js导入 像楼主提供的这种简单的js。一般直接放在页面中即可。我说的是方法比较多的情况才用外部文件。这个也不难区别的。在javascript中嵌入jsp代码和在jsp中动态组装javascript代码是不一样的概念。
如果你的javascript写在了html页面中,那么你的jsp代码是不会被编译的。
如果你在jsp中动态组装了javascript代码,那么jsp页面会被编译为一个class类,这个类会跟你写的逻辑会输出(out.println()方式)javascript代码。举例来说:
在javascript中写jsp代码:
<javascript>
alert(“<% int i=1i++out.println(i)%>”)
</javascript>
上面的代码段如果放在jsp页面中<% int i=1i++out.println(i)%>会被编译,但是放在HTML页面中不会被编译。
在jsp页面中动态组装javascript代码:
<% if(loginType =="admin"){
out.println("<javascript>function ShowType{ document.getElementById('type').innerHTML = "admin" } </javascript>")
}else{
out.println("<javascript>function ShowType{ document.getElementById('type').innerHTML = "admin" } </javascript>")
}%>
上面这个jsp代码段放在合适的jsp页面中这个javascript是会被发送到client的,你就可以在client使用这个ShowType方法。
总之一句话:javascript代码是给浏览器执行的,jsp代码是在server端编译的,jsp代码必须放在jsp页面中经server编译,而javascript只要发送给client就行。