使用ajax加载的Javascript只能在第一次使用

时间:2012-01-20 22:33:40

标签: javascript html ajax

我创建了两个简单的测试页面。一个使用XMLHttpRequest加载另一个。 (只是使用slimbox显示图像的页面) 这是第一次完美。但是当试图再次运行它时,再次按下按钮,它就不再起作用了。当我重新加载整个页面时,它第一次再次运行。我是否必须卸载或重新加载脚本或其他内容? 我知道这是脚本标签的两倍,不知道为什么,但它是我开始工作的唯一方式。怎么才第一次才有效?

请帮忙。

testajax.php

<html>
<head>
<link rel="stylesheet" href="SlimBox/css/slimbox.css" type="text/css" media="screen"   />


<script id="script1" type="text/JavaScript"></script>
<script id="script2" type="text/JavaScript"></script>
<script type="text/javascript" src="SlimBox/js/mootools.js"></script>  
<script type="text/javascript" src="SlimBox/js/slimbox.js"></script>  

<script type="text/javascript">
function loadXMLDoc(Page)
{
 var xmlhttp;
 if (window.XMLHttpRequest)
 {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
 }
 else
 {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
 xmlhttp.onreadystatechange=function()
 {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
  {
   document.getElementById("myDivFull").innerHTML=xmlhttp.responseText;
   document.getElementById('script1').src = 'SlimBox/js/mootools.js';
   document.getElementById('script2').src = 'SlimBox/js/slimbox.js';
  }
 }
 xmlhttp.open("GET",Page,true);
 xmlhttp.send();
}
</script>
</head>
<body>
  <input id="Header2" type="button" onClick="loadXMLDoc('testImage.php')" name='Sok' value='Load' >            
   <div id="myDivFull"></div> 
</body>
</html>

testImage.php

<a href='img/facebook-icon.png' rel='lightbox' cap='test'><img alt='' border='0' src='img/facebook-icon.png' /></a>

修改 gilly3提供的方法与单独的js文件完美配合,但是如果我将google小工具脚本'link'添加到函数中,我就无法工作。这可能是以不同的方式解决的吗?下面是我无法工作的代码。

function addScript(src)
{
    var script = document.body.appendChild(document.createElement("script"));
    script.src = src;
} 

if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
    document.getElementById("myDivFull").innerHTML=xmlhttp.responseText;
    addScript('//www.gmodules.com/ig/ifr?url=http://www.mortgage-info.com/gadgets    
    /gadgetsmortgagecalculator.xml&amp;synd=open&amp;w=250&amp;h=200& 
    amp;title=Mortgage+Calculator&amp;border=%23ffffff%7C3px%2C1px+solid+%23999999&
    amp;output=js');
}

谢谢。

1 个答案:

答案 0 :(得分:3)

肯定有更好的方法来完成你想要做的事情。但是,我不知道你想要做什么, 是你问题的简单答案:

不要为创建空脚本标签而烦恼。只需动态添加任意数量的脚本标记:

function addScript(src)
{
    var script = document.body.appendChild(document.createElement("script"));
    script.src = src;
}

if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
    document.getElementById("myDivFull").innerHTML=xmlhttp.responseText;
    addScript('SlimBox/js/mootools.js');
    addScript('SlimBox/js/slimbox.js');
}


编辑:“更好的方法”是创建一个能够满足您需求的功能,并在需要时随时调用。例如,如果您的脚本包含:

someArray = window.someArray || [];
var elements = document.querySelectorAll(".someClass");
for (var i = 0; i < elements.length; i++)
{
    someArray.push(elements[i].value);
}

您只需创建一个函数:

var someArray = [];
function reInit()
{
    var elements = document.querySelectorAll(".someClass");
    for (var i = 0; i < elements.length; i++)
    {
        someArray.push(elements[i].value);
    }
}

每次收到AJAX数据时都会调用它。