2012-01-20 40 views
1

我創建了兩個簡單的測試頁。一個使用XMLHttpRequest加載另一個。 (只是一個頁面使用slimbox來顯示圖像) 這工作完美的第一次。但是當試圖再次運行它時,再次按下按鈕,它不再起作用。當我重新加載整個頁面時,它再次運行。我是否必須卸載或重新加載腳本或其他東西? 我知道這裏是腳本標記的兩倍,不知道爲什麼,但是它是唯一能讓它在第一時間工作的方法。如何才能第一次運作?裝載了ajax的Javascript僅在第一次運行

請幫忙。

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文件的工作,但我不能讓它開始工作如果我添加一個谷歌小工具腳本'鏈接'到該函數。這可能以不同的方式解決嗎?以下是我無法工作的代碼。

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'); 
} 

謝謝。

+0

Pleeeease使用jQuery – cambraca

+0

您是否嘗試在腳本URL的末尾添加一個nonce參數? – Pointy

+0

你爲什麼要重新加載JavaScript文件?我相信有更好的方法來做這件事。 –

回答

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數據的時間。

+0

yess !! ..謝謝!!!想象一下,簡單的事情,讓我度過了一天。你是一個真正的人。謝謝。 – user1149557

+0

嘿gilly3 ...如果我將一個Google小工具的腳本插入到「addscript」函數中,它怎麼會失效?像這樣.. addScript('//www.gmodules.com/ig/ifr?url=http://www.mortgage-info.com/gadgets/gadgetsmortgagecalculator.xml & synd = open & w = 250 & h = 200 & title = Mortgage + Calculator & border =%23ffffff%7C3px%2C1px + solid +%23999999 & output = js'); – user1149557

相關問題