2012-01-20 3 views
1

Я создал две простые тестовые страницы. Один загружает другой, используя XMLHttpRequest. (только страница с использованием slimbox для отображения изображения) Это работает отлично в первый раз. Но при попытке запустить его снова, снова нажав кнопку, он больше не работает. Когда я перезагружаю всю страницу, она работает в первый раз. Нужно ли мне загружать или перезагружать скрипты или что-то еще? Я знаю, что здесь двойник тегов скрипта, не знаю почему, но это единственный способ заставить его работать в первую очередь. Почему это работает только в первый раз?Javascript, загруженный ajax, работает только в первый раз

Пожалуйста, помогите.

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> 

EDIT: Метод обеспечивает gilly3 отлично работал с отдельным JS-файла, однако я не могу заставить его работать если я добавлю в эту функцию скрипт gadget gagget. Разве это может быть иначе? Ниже приведен код, с которым я не могу работать.

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

Вы пытались добавить параметр nonce в конец URL-адресов сценариев? – Pointy

+0

Почему вы перезагружаете файлы javascript? Я уверен, что есть лучшие способы сделать это. –

ответ

3

Наверняка есть лучший способ выполнить то, что вы пытаетесь сделать. Но, я не знаю, что вы пытаетесь сделать, а там is Простой ответ на ваш вопрос:

Не беспокойтесь о создании пустых тегов сценария. Просто добавьте столько тегов сценариев, как вам нравится динамически:

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


Edit: «лучший путь» должен был бы создать функцию, которая делает то, что вы хотите, и называть его всякий раз, когда вам нужно к. Например, если ваш сценарий содержал:

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

Hey gilly3 ...почему это не работает, если я вставляю скрипт для гаджета google в функцию «addcript»? как это. addScript ('//www.gmodules.com/ig/ifr?url=http://www.mortgage-info.com/gadgets/gadgetsmortgagecalculator.xml & synd = open & w = 250 & h = 200 & title = Ипотека + Калькулятор & border =% 23ffffff% 7C3px% 2C1px + solid +% 23999999 & output = js '); – user1149557

Смежные вопросы