Eccoci ancora qua con ajax..
Ho costruito una pagina php + javascipt che mi permette di caricare il contenuto di un'altra pagina in un div della stessa. In altre parole:
- prova.php contiene <div id=content></div> e un pulsante che attiva la funzione ajax
- cliccando sul pulsante la funzione carica la pagina prova.php?action=execute
- il risultato della chiamata viene inserito nel div "content"
Fino a qua è tutto ok. Il problema si presenta quando nel codice da inserire nel div è presente javascript. In firefox tutto ok, ma in internet explorer sembra che la stringa <script....../script> non venga interpretata....
ho fatto un test mantenendo solo le righe essenziali:
http://www.adeline.it/prova.php
Ho cercato in rete, ma sembra che nessuno abbia mai avuto necessità di eseguire script in questo modo.
Qualcuno sa almeno dove sbaglio? Perchè ie non fa pertire lo script? Sono giorni che non mi do pace...
Spero possiate essermi di aiuto
il codice è questo:
codice:
<?php
$string="";
if (isset($_GET['action'])){$action=$_GET['action'];}
//------------------------------------------------------------------------------
//questo contenuto viene caricato nel div "content" con la chiamata ajax
if($action=="execute"){
$string.="<script type=\"text/javascript\">alert(\"richiesta ok\")</script>";
$string.="richiesta ok";
echo($string);
return;
}
//------------------------------------------------------------------------------
?>
<html>
<head>
<script type="text/javascript">
// Apre una pagina in un div specifico
// @url: indirizzo della pagina
// @containerid: div di destinazione
// @addstring: stringa aggiuntiva da aggiungere all'html
function ajaxpage(url, containerid, addstring){
var pat=/\?/;
var spat=url.search(pat);
if(spat!=-1){url+="&dummy="+new Date().getTime();}
else{url+="?dummy="+new Date().getTime();}
var page_request = false;
page_request=getXMLHttp();
page_request.open('GET', url, true);
page_request.onreadystatechange= function() {
loadpage(page_request, containerid, addstring);
}
page_request.send(null);
}
//carica l'html nel div
//@page_request: html da visualizzare
//@containerid: div di destinazione
//@addstring: stringa aggiuntiva da aggiungere all'html
function loadpage(page_request, containerid, addstring){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
var olddiv = document.getElementById(containerid);
var d = olddiv.parentNode;
d.removeChild(olddiv);
var newdiv = document.createElement('div');
newdiv.setAttribute('id',containerid);
if(addstring){
newdiv.innerHTML=page_request.responseText+addstring;
}
else{
alert("stringa inserita nel DIV: "+page_request.responseText);
newdiv.innerHTML=page_request.responseText;
}
d.appendChild(newdiv);
}
}
//classe xmlhhtp per interazioni ajax
function getXMLHttp() {
var xmlhttp = null;
if (window.ActiveXObject) {
if (navigator.userAgent.toLowerCase().indexOf("msie 5") != -1) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} else {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
}
if (!xmlhttp && typeof(XMLHttpRequest) != 'undefined') {
xmlhttp = new XMLHttpRequest()
}
return xmlhttp
}
</script>
</head>
<body>
<?php
$string.="Esperimento per l'inserimento di contenuto in un DIV con l'uso di ajax.
Premendo 'clicca' la funzione ajaxpage rilegge la pagina prova.php (con parametro action=execute) e riporta il risultato nel div 'content'.
Per un motivo che non mi so spiegare in internet explore non viene riconosciuta la parte di stringa contenente lo script javascript.
Per facilitare il debug ho inserito un alert che propone la stringa restituita al div dalla funzione javascript
";
$string.="<div><div id='content'></div></div>";
$string.="<a href=\"javascript:ajaxpage('prova.php?action=execute', 'content')\">Clicca</a>";
echo($string);
?>
</body>
</html>