[Tutorial JS] Exemplu de incarcare a continutului unei pagin

#1
Nume Tutorial: Exemplu de incarcare a continutului unei pagini prin AJAX
Descriere: Exemplu de incarcare a continutului unei pagini prin AJAX
Download:
Autor: Anonim
Sursa (Link-ul oficial):
tutorialeonline
Propria parere: Folositor.
Tutorialul:

În exemplul următor veţi vedea cum puteţi încărca conţinutul unei pagini prin intermediul AJAX. Pentru început stabilim un tabel cu 2 coloane, una pentru meniul lateral şi a doua coloană în care se va afişa conţinutul paginii.

Cod: Selectaţi tot

 <table width="100%" border="0" cellspacing="3" cellpadding="0"><br />
 <tr><br />
 <td width="20%" valign="top">Meniu</td><br />
 <td width="80%" valign="top">Continutul paginii: </td><br />
 </tr><br />
 <tr><br />
 <td valign="top"><a href="pagina_1.php" id="cerere_pagina_1"
 onClick="afiseaza_pagina('pagina_1.php'); return false">Pagina 1</a><br><br />
 <a href="pagina_2.php" id="cerere_pagina_2"
 onClick="afiseazaPagina('pagina_2.php'); return false">Pagina 2</a><br><br />
 <a href="pagina_3.php" id="cerere_pagina_3"
 onClick="afiseazaPagina('pagina_3.php'); return false">Pagina 3</a> </td><br />
 <td valign="top"><span id="locul_de_afisare">&nbsp;</span></td><br />
 </tr><br />
 </table> 
Observaţi în codul de mai sus că am pus la link atât numele paginii care va fi încărcată cât şi un cod JavaScript care se execută la onClick. Dacă vă întrebaţi de ce, vă răspund în continuare. În cazul în care browser-ul vizitatorului nu suportă JavaScript sau are dezactivată rularea scripturilor JavaScript se va încărca pagina normal prin apelul tagului HTML <a href="pagina_1.php"> .Dacă browser-ul vizitatorului ştie de JavaScript atunci când va da click pe link se va executa codul specificat în tagul onClick, şi anume va rula funcţia JavaScript afiseaza_pagina() iar ca să nu dea eroare sau conflict cu linkul specificat în tagul <a href> am pus să returneze un mesaj de cerere falsă return false pentru a păcăli browserul.
Pe coloana 2 avem un tag html în care se va afişa pagina cerută. Observaţi că am specificat un id la tagul respectiv, de care o să vorbim mai jos.
În continuare, sunt funcţiile JavaScript care prelucrează cererile şi returnează rezultatul:

Cod: Selectaţi tot

<script language="javascript" type="text/javascript">
 var xmlHttp
 
 function afiseaza_pagina(str)  {
    if (str.length==0) {
       document.getElementById("locul_de_afisare").innerHTML=""
       return
    }
    xmlHttp=incarca_obiectul_XMLHTTP()
    if (xmlHttp==null) {
       alert ("Browserul nu suporta cererile prin AJAX ")
       return
    }
    var url="pagina.php"
    url=url+"?pag="+str
    url=url+"&sid="+Math.random()
    xmlHttp.onreadystatechange=starea_incarcarii
    xmlHttp.open("GET",url,true)
    xmlHttp.send(null)
 }
 
 function starea_incarcarii() {
    if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
       document.getElementById("locul_de_afisare").innerHTML=xmlHttp.responseText
    }
 }
 
 function incarca_obiectul_XMLHTTP() {
    var cerere_http=null;
 
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
       cerere_http = new XMLHttpRequest();
       if (cerere_http.overrideMimeType) {
          cerere_http.overrideMimeType('text/xml');
       }
    }
    else if (window.ActiveXObject) { // IE
       try {
          cerere_http = new ActiveXObject("Msxml2.XMLHTTP");
       }
       catch (e) {
          try {
             cerere_http = new ActiveXObject("Microsoft.XMLHTTP");
          }
          catch (e) {}
       }
    }
    if (!cerere_http) {
       alert('Nu se poate initializa obiectul XMLHTTP');
       return false;
    }
    else {
       return cerere_http;
    }
 }
 </script> 
Partea de JavaScript este de preferat să o puneţi între tagurile de head, dar se poate pune şi în body.
Funcţia JavaScript afiseaza_pagina() se execută de fiecare dată cănd se dă click pe un link. Dacă se cere o pagină str.length > 0 funcţia face următoarele:
- Defineşte adresa url pentru fişierul cu acces la server (pagina.php)
- Adaugă un parametru (pag) care conţine numele paginii cerute si care este trimis prin GET către pagina.php
- Adaugă un număr aleator pentru a preveni serverul să utilizeze fişierele din cache (ca să încarce la fiecare cerere pagina nouă)
- Crează un obiect XMLHTTP, şi specifică obiectului să execute funcţia numită starea_incarcarii în timp ce schimbarea este în curs
- Deschide obiectul XMLHTTP cu url-ul specificat.
- Trimite o cerere HTTP către server.
Dacă funcţia este apelată fără parametru, atunci ea va şterge conţinutul paginii corespunzător id-ului id="locul_de_afisare".
Funcţia starea_incarcarii() se execută de fiecare dată când starea obiectului XMLHTTP se schimbă. Cănd schimbarea atinge nivelul 4 (sau nivelul "complete" - încărcare completă) conţinutul lui locul_de_afisare este umplut cu textul primit de la server.
Funcţia incarca_obiectul_XMLHTTP() încearcă să rezolve problema încărcării obiectului XMPHTTP pentru diferite tipuri de browsere pentru a putea trimite şi primi date în mod asincron specific tehnologiei AJAX. Rezultatul îl puteţi vedea mai jos precum şi conţinutul întregului script. Pagina existentă pe server conţine următorul cod:

Cod: Selectaţi tot

 <?php
 // pagina existenta pe server pagina.php
 if (isset($_GET['pag']))  {
    $pagina = $_GET['pag'];
    echo $pagina;
    if (is_file($pagina)) {
       include($pagina);
    }
    else {
       echo '<br />A fost ceruta pagina '.$pagina.' dar nu exista pe server.';
    }
 }
 else {
    echo '<br />Alegeti o pagina';
 }        
 
 ?> 
Codul sursă al acestui exemplu este prezentat în continuare:

Cod: Selectaţi tot

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 <title>Exemplu de ?ncărcare a paginii cu AJAX</title>
 
 <script language="javascript" type="text/javascript">
 var xmlHttp
 
 function afiseaza_pagina(str)   {
    if (str.length==0) {
       document.getElementById("locul_de_afisare").innerHTML=""
       return
    }
    xmlHttp=incarca_obiectul_XMLHTTP()
    if (xmlHttp==null) {
       alert ("Browserul nu suporta cererile prin AJAX ")
       return
    }
    var url="pagina.php"
    url=url+"?pag="+str
    url=url+"&sid="+Math.random()
    xmlHttp.onreadystatechange=starea_incarcarii
    xmlHttp.open("GET",url,true)
    xmlHttp.send(null)
 }
 
 function starea_incarcarii() {
    if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
       document.getElementById("locul_de_afisare").innerHTML=xmlHttp.responseText
    }
 }
 
 function incarca_obiectul_XMLHTTP() {
    var cerere_http=null;
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
       cerere_http=new XMLHttpRequest();
       if (cerere_http.overrideMimeType) {
          cerere_http.overrideMimeType('text/xml');
       }
    }
    else if (window.ActiveXObject) { // IE
       try {
          cerere_http=new ActiveXObject("Msxml2.XMLHTTP");
       }
       catch (e) {
          try {
             cerere_http=new ActiveXObject("Microsoft.XMLHTTP");
          }
          catch (e) {}
       }
    }
    if (!cerere_http) {
       alert('Nu se poate initializa obiectul XMLHTTP');
       return false;
    }
    else {
       return cerere_http;
    }
 }
 </script>
 
 </head>
 <body>
 <table width="100%" border="1" cellspacing="3" cellpadding="0">
 <tr>
 <td width="20%" valign="top">Meniu</td>
 <td width="80%" valign="top">Con&#355;inutul paginii: </td>
 </tr>
 <tr>
 <td valign="top">
 <a href="pagina_1.php" id="cerere_pagina_1"
 onclick="afiseaza_pagina('pagina_1.php'); return false">Pagina 1</a><br />
 <a href="pagina_2.php" id="cerere_pagina_2"
 onclick="afiseaza_pagina('pagina_2.php'); return false">Pagina 2</a><br />
 <a href="pagina_3.php" id="cerere_pagina_3"
 onclick="afiseaza_pagina('pagina_3.php'); return false">Pagina 3</a>
 </td>
 <td valign="top">
 <span id="locul_de_afisare"><?php include("pagina.php"); ?></span>
 </td>
 </tr>
 </table>
 </body>
 </html> 

Înapoi la “Tutoriale JS”

Cine este conectat

Utilizatori răsfoind acest forum: Niciun utilizator înregistrat și 2 vizitatori