Asynchronous Javascript And XML
C'ho un post-it su Netvibes da parecchio tempo, ma non ho mai avuto tempo di applicarmici.
Negli ultimi mesi ho passato in rassegna parecchie cosette interessanti, collezionando e catalogando script e link interessanti
oggi ho avuto modo di realizzare la mia prima applicazione sfruttando ajax: niente di ché, una paginetta che richiama il contenuto di un'altra.
Prima applicazione, prima difficoltà: neanche il tempo di iniziare e già ho incontrato il primo problema :D
Per questioni di sicurezza (?) l'oggetto XmlHttpRequest non può andare a richiamare una pagina esterna (su un server remoto) al dominio (o sito...boh) :
in pratica non si può richiamare pagine su altri siti esterni al proprio
è un problema!
Niente paura a tutto c'è soluzione ;)
Vediamo di partire da zero: voglio che la mia paginetta test_ajax.htm carichi il contenuto della home page di google.it (come una qualsiasi altra pagina)
utilizzeremo per far questo una pagina intermedia: getHttp.asp
in questa pagina non faccio altro che utilizzare il componente MSXML2.XMLHTTP per fare quello che avrei voluto fare con javascript (e che mi è stato impedito): gli passo l'url di una *qualsiasi* pagina sul web, lui se la legge e me la ritorna paro-paro (certo i css e le immagini con url relativi vanno a farsi friggere, ma si può rimediare volendo ;) )
il codice semplicissimo della pagina getHttp.asp:
'### si prende l'url da un parametro%>
strURL = request("url")
Set objXMLHTTP = Server.CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.Open "GET", StrURL, false
objXMLHTTP.Send
'### carico il contenuto (sotto forma di testo) della pagina
'### che ho scaricato nella variabile risultato Risultato
Risultato = objXMLHTTP.responseText
'### importante: lo stampo, così l'oggetto XmlHttpRequest della pagina
'### test_ajax.htm lo vedrà come il risultato della sua chiamata
response.write Risultato
e ora il codice della pagina test_ajax.htm:
<body>
<script type="text/javascript">
function ajaxFunction(url)
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.getElementById("risultato").innerHTML=xmlHttp.responseText ;
}
}
xmlHttp.open("GET","getHttp.asp?url="+url ,true);
xmlHttp.send(null);
}
</script>
Name: <input type="text" id="url" /> <input type="button"onclick="ajaxFunction(document.getElementById('url').value);" value="Get">
<div id="risultato" style="border: 1px dashed orange"></div>
</body>
</html>
Ci sarebbe da fare una piccola precisazione: l'url passato come parametro andrebbe per sicurezza encodato, per evitare che caratteri speciali come "?" "&" eccetera possano interferire.
ma il mio è solo un concetto, gli aggiustamenti li potete fare da soli :P
Concl
Mi chiedo: a che serve inibire la possibilità di richiamare una pagina remota, se poi la cosa è facilmente aggirabile? Ignoro
}
2 commenti:
Ho incontrato il tuo stesso problema con AJAX e mi sarebbe utile il codice ASP che hai utilizzato.
Nel post manca, puoi ripostarlo o inviarmelo a michele@netcomsas.com.
Grazie
ciao, scusa ho notato il tuo commento in ritardo :D
cmq nel post c'è il codice relativo alla paginetta ASP che fa da "intermediario"
bye
Posta un commento