Jacopo Nuzzi
a- a+

Programmare in Ajax con Php senza usare l'oggetto xmlhttprequest 2

Pagina 2 di 3

Questo codice per prima cosa fa ottenere la directorydell'url, quindi riusciamo ad ottenere un url base.
La funzione 'ajax_do', è quella che fa tuttoil lavoro! In primis controlla se l'url passato allafunzione è relativo ad un altro dominio oppureè un file che risiede sullo stesso server.

Poi crea un nuovo elemento script usando la funzionecreateElement(). Dopo di che, impostal'attributo "src" dell'elemento delloscript, e aggiunge l'elemento dello script al corpo,efficacemente caricando il file riferito all'elementodello script.

Tutto quello che ci serve ora è una pagina sempliceche inneschi la chiamata ad Ajax!

Ecco il codice:


<html>
<head>
<title>Demo 1 - The Basic's</title>
<script type="text/javascript"src="engine.js"></script>
</head>

<body>
<div id="contentdiv"></div>
<input type="button" onClick="ajax_do('page1.php');" value="Get content"/>
</body>
</html>



Clicca quì per visualizzare lademo

Se guardi la demo o se crei tu lo script, noterai che agisceproprio allo stesso modo di Ajax e probabilmente anche meglioin Internet Explorer (senza messaggi di errore ActiveX).
N.B. Fate attenzione che per usare questoscript su Internet Explorer il livello di sicurezza nonpuò essere "Alto" , deveessere impostato su "Medio" o su "Basso!"

 

Ottenere il contenuto di una pagina

Nell'esempio precedente, abbiamo usato del JavaScriptnella pagina page1.php per impostare innerHTML del div dicontenuto.
Ma se non volessimo fare questo, ma semplicemente volessimoincludere il contenuto di un'altra pagina?
Questo è possibile con il nostro metodo, solo chedobbiamo creare uno script in PHP che ci possa aiutare.
Questo script serve ad ottenere il contenuto della pagina epoi stampare il giusto JavaScript per impostarel'innerHTML del elemento.

Il codice è questo:


<?php

// Get URL and div
if (!isset($_GET['url'])) { die(); } else { $url = $_GET['url']; }
if (!isset($_GET['el'])) { die(); } else { $el = $_GET['el']; }

// Make sure url starts with http

if (substr($url, 0, 4) != 'http') {
// Set error
echo 'alert('Security error; incorrect URL!');';
die();
}

// Try and get contents
$data = @file_get_contents($url);

if ($data === false) {
// Set error
echo 'alert('Unable to retrieve "' . $url . '"');';
die();
}

// Escape data
$data = str_replace("'" , "'" , $data);
$data = str_replace('"', "'+String.fromCharCode(34)+ '" , $data);
$data = str_replace (" " , ' ', $data);
$data = str_replace ("" , ' ', $data);
$data = str_replace (" " , ' ', $data);
?>
el = document.getElementById('<?php echo $el; ?>');
el.innerHTML = '<?php echo $data; ?>';


Come puoi vedere per prima cosa ottiene il contenuto dellapagina usando la funzionefile_get_contents(), e poi stampa il giustoJavaScript per impostare l'innerHTMLdell'elemento.
La funzione Ajax che agisce con lo script PHP èquesta:

function    ajax_get (url, el) {
// Has element been passed as object or id-string?
if (typeof(el) == 'string') {
el = document.getElementById(el);
}

// Valid el?
if (el == null) { return false; }

// Does URL begin with http?
if (url.substring(0, 4) != 'http') {
url = base_url + url;
}

// Create getfile URL
getfile_url = base_url + 'getfile.php?url=' + escape(url) + '&el=' + escape(el.id);

// Do Ajax
ajax_do (getfile_url);

return true;
}


Quello che questa funzione fa è per prima cosacercare se l'elemento esiste, poi creare l'url alfile getfile.php, includendo la pagina per ottenere ilcontenuto e l'id dell'elemento ed infine chiama lafunzione Ajax tramite la funzioneajax_do().
Semplice e facile e funzionante!!
Clicca quì per vedere la demo inazione