a.jsp经过Ajax调用b.jsp,而后返回b.jsp的内容显示在a.jsp中。如今遇到一个问题,就是在b.jsp中定义了js,在a.jsp中click button并无调用该js。在firefox中经过Firebug查看源代码。把它保存成html或jsp,js均可以被调用。源代码以下:-----a.jsp-----------------------Get Content
--------------------b.jsp------------------------- Get Name---------------------src.html---------------------------TitleGet Content出现这个问题的缘由是:直接经过innerHTML动态嵌入的script,浏览器会当作普通的文本,不会看成SCRIPT节点维护到DOM里面,因此调用的时候找不到。html
解决办法:用innerHTML嵌入之后,经过DOM从myDIV中取出嵌入的script节点,而后新建立一个script节点,并把嵌入的script里面的内容也赋给新建立的script节点,而后把这个新节点追加到页面的head节点中,这样就能够调用里面的getName方法了。java
这里有两种方式:浏览器
第一种方式:只修改a.jsp,增长红色部分app
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;var myDivScript = document.getElementById("myDiv").getElementsByTagName("SCRIPT").item(0);
var newScript = document.createElement("SCRIPT");
newScript.innerHTML = myDivScript.innerHTML;
document.getElementsByTagName("HEAD").item(0).appendChild(newScript);jsp
这种方式在FF中能够work,可是IE中不能work。函数
第二种方式:把b.jsp中的js抽取出来放在一个js文件里。在a.jsp中经过src引用的方式把js加到HEAD里面。spa
在a.jsp的 部分增长一个函数 function append() firefox
--------------------a.jsp-------------------------------------------------------xml
String tt = "Title";
String path = "../js/script.js";
%>
Get Content
End
xmlhttp = new XMLHttpRequest();
function getContent() {
append();
xmlhttp.open("POST","./b.jsp",true);
xmlhttp.send();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
}
function append() {
var head = document.getElementsByTagName('HEAD').item(0);
var script = document.createElement("script");
script.src = "";
script.type="text/javascript";
script.charset="utf-8";
head.appendChild(script);
}
------------------------------------b.jsp--------------------------------------------------------
String aa = "To include jsp";
%>
Get Name
--------------------------------------------script.js-----------------------------------------------------------------
function getName() {
document.getElementById("myname").value = 'Bill';
}
-------------------------------------------------End-------------------------------------------------------------------
这种方式在FF和IE中都能work。