金生水起sky 2012-11-03 11:34
浏览 214
已采纳

请教一个Ajax调用后JS不生效的问题

a.jsp通过Ajax调用b.jsp,然后返回b.jsp的内容显示在a.jsp中。现在遇到一个问题,就是在b.jsp中定义了js,在a.jsp中click button并没有调用该js。在firefox中通过Firebug查看源代码。把它保存成html或jsp,js都可以被调用。请教大侠,问题出在哪?谢谢!
-----a.jsp-----------------------
<%@ page language="java" contentType="text/html" %>
<%
String tt = "Title";
%>
<%=tt %>
Get Content

End

xmlhttp = new XMLHttpRequest(); function getContent() { xmlhttp.open("POST","b.jsp",true); xmlhttp.send(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } }

--------------------b.jsp-------------------------
<%@ page language="java" contentType="text/html" %>
<%
String aa = "To include jsp";
%>
<%=aa %>


Get Name

function getName() { alert("ok"); document.getElementById("myname").value = 'Bill'; }

---------------------src.html---------------------------

Title
Get Content

To include jsp
Get Name function getName() { alert("ok"); document.getElementById("myname").value = 'Bill'; }

End

xmlhttp = new XMLHttpRequest(); function getContent() { xmlhttp.open("POST","b.jsp",true); xmlhttp.send(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 &amp;&amp; xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } }


-----------------------End------------------------

  • 写回答

1条回答 默认 最新

  • blogzhoubo 2012-11-05 15:27
    关注

    加上下面的内容就OK了,在firefox下测试通过,ie下需要再调整一下语法。

    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

    [color=red]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);[/color]

    原因:直接通过innerHTML动态嵌入的script,浏览器会当做普通的文本,不会当作SCRIPT节点维护到DOM里面,所以调用的时候找不到。

    解决方法:用innerHTML嵌入以后,通过DOM从myDIV中取出嵌入的script节点,然后新创建一个script节点,并把嵌入的script里面的内容也赋给新创建的script节点,然后把这个新节点追加到页面的head节点中,这样就可以调用里面的getName方法了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 数学的三元一次方程求解
  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题