Come creare richieste AJAX con Javascript non elaborato

I framework Javascript hanno trasformato semplici funzioni AJAX in one-liner. Questo è abbastanza incredibile, considerando il fatto che sarebbe necessario più di venti per realizzare la stessa cosa con Javascript non elaborato. Tuttavia, è importante imparare cosa c'è "sotto il cofano".


screencast

Script finale

Questo è uno script relativamente semplice che ti consentirà di richiedere le pagine in modo asincrono utilizzando una funzione "load (URL, CALLBACK)".

 // La nostra funzione "load" semplificata accetta un parametro URL e CALLBACK. load ('test.txt', function (xhr) document.getElementById ('container'). innerHTML = xhr.responseText;); function load (url, callback) var xhr; if (typeof XMLHttpRequest! == 'undefined') xhr = new XMLHttpRequest (); else var versions = ["MSXML2.XmlHttp.5.0", "MSXML2.XmlHttp.4.0", "MSXML2.XmlHttp.3.0", "MSXML2.XmlHttp.2.0", "Microsoft.XmlHttp"] per (var i = 0 , len = versions.length; i < len; i++)  try  xhr = new ActiveXObject(versions[i]); break;  catch(e)  // end for  xhr.onreadystatechange = ensureReadiness; function ensureReadiness()  if(xhr.readyState < 4)  return;  if(xhr.status !== 200)  return;  // all is well if(xhr.readyState === 4)  callback(xhr);   xhr.open('GET', url, true); xhr.send(");  // or with jQuery… $('#container').load('test.txt');

Alcune note da considerare durante la visione

onreadystatechange sparerà cinque volte quando viene richiesta la pagina specificata.

  • 0: inizializzata
  • 1: Caricamento in corso
  • 2: caricato
  • 3: interattivo
  • 4: completare

Un valore di "4" è quello che stiamo cercando. Una volta raggiunto, sappiamo che siamo liberi di eseguire un'azione con i dati restituiti.

XMLHttpRequest e ActiveXObject

I browser moderni utilizzano l'oggetto "XMLHttpRequest" per creare richieste asincrone. Ciò significa che se desideri ignorare IE6, sei libero di rimuovere il controllo ActiveXObject, questa sezione.

 if (typeof XMLHttpRequest! == 'undefined') xhr = new XMLHttpRequest (); else var versions = ["Microsoft.XmlHttp", "MSXML2.XmlHttp", "MSXML2.XmlHttp.3.0", "MSXML2.XmlHttp.4.0", "MSXML2.XmlHttp.5.0"]; per (var i = 0, len = versions.length; i < len; i++)  try  xhr = new ActiveXObject(versions[i]); break;  catch(e)  // end for 

Invece, potresti semplicemente scrivere "var xhr = new XMLHttpRequest ();". Sii cauto con questo metodo. Una volta estratto dalla sua funzione "carica", è facile mantenere il controllo IE così com'è.

Esci dallo spazio globale

Se si fanno richieste multiple, si potrebbe prendere in considerazione lo spostamento del codice nel proprio oggetto. Quindi, anziché chiamare direttamente la funzione "load", si utilizza "myObject.load ();". Una linea guida di base per realizzare questo sarebbe:

 var ajax = load: function () // incolla qui, otherMethod: someFunction () // incolla qui ajax.load ();

Conclusione

Non ho dubbi che alcuni di voi lasceranno un commento affermando qualcosa del tipo: "Perché dovrei mai farlo quando può essere fatto con una sola riga di jQuery?" La risposta è perché devi imparare cosa c'è sotto il cofano della tua macchina, per così dire. Framework come Mootools e jQuery hanno reso Javascript incredibilmente accessibile ai progettisti. Se rientri in questa categoria, ti consiglio vivamente di prendere anche un libro in Javascript. Non c'è niente di sbagliato, secondo me, nell'apprendimento di entrambi contemporaneamente. Basta essere sicuro che impari entrambi!


È simile a lavorare con WordPress se non conosci PHP. Certo, è possibile, ma vorresti davvero?

Spero che questo ti faccia funzionare! Mi piacerebbe sentire i tuoi pensieri! Buon fine settimana. Ci vediamo lunedì o su Twitter!

  • Iscriviti al feed RSS di NETTUTS per ulteriori tuts e articoli di sviluppo web giornalieri.