AJAX-Anfragen mit rohem Javascript durchführen

Javascript-Frameworks haben aus einfachen AJAX-Funktionen Einzeiler gemacht. Dies ist ziemlich unglaublich, wenn man bedenkt, dass mehr als zwanzig erforderlich wären, um dasselbe mit rohem Javascript zu erreichen. Trotzdem ist es wichtig zu lernen, was "unter der Haube" ist.


Screencast

Schlussskript

Dies ist ein relativ einfaches Skript, mit dem Sie Seiten asynchron mit der Funktion "load (URL, CALLBACK)" anfordern können.

 // Unsere vereinfachte "load" -Funktion akzeptiert eine URL und einen CALLBACK-Parameter. load ('test.txt', Funktion (xhr) document.getElementById ('container'). innerHTML = xhr.responseText;); Funktion laden (URL, Rückruf) 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"] für (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');

Einige Anmerkungen, die beim Betrachten zu berücksichtigen sind

onreadystatechange wird fünfmal ausgelöst, wenn die angegebene Seite angefordert wird.

  • 0: nicht initialisiert
  • 1: Wird geladen
  • 2: geladen
  • 3: interaktiv
  • 4: Komplett

Wir suchen nach dem Wert "4". Sobald es erreicht ist, wissen wir, dass wir mit den zurückgegebenen Daten eine Aktion ausführen können.

XMLHttpRequest und ActiveXObject

Moderne Browser verwenden das Objekt "XMLHttpRequest", um asynchrone Anforderungen zu stellen. Das heißt, wenn Sie IE6 ignorieren möchten, können Sie die ActiveXObject-Prüfung - diesen Abschnitt - entfernen.

 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"]; für (var i = 0, len = versions.length; i < len; i++)  try  xhr = new ActiveXObject(versions[i]); break;  catch(e)  // end for 

Stattdessen könnten Sie einfach "var xhr = new XMLHttpRequest ();" schreiben. Seien Sie vorsichtig mit dieser Methode. Nach der Abstraktion zu seiner eigenen "load" -Funktion ist es einfach, den IE-Check so zu lassen, wie er ist.

Raus aus dem globalen Raum

Wenn Sie mehrere Anforderungen stellen, können Sie Ihren Code in ein eigenes Objekt verschieben. Anstatt die Funktion "load" direkt aufzurufen, verwenden Sie "myObject.load ();". Eine grundlegende Richtlinie, um dies zu erreichen, wäre:

 var ajax = load: function () // hier einfügen, otherMethod: someFunction () // hier einfügen ajax.load ();

Fazit

Ich zweifle nicht daran, dass einige von Ihnen einen Kommentar hinterlassen, in dem Folgendes steht: "Warum sollte ich das jemals tun, wenn es nur mit einer Zeile von jQuery möglich ist?" Die Antwort ist, weil Sie sozusagen lernen müssen, was sich unter der Motorhaube befindet. Frameworks wie Mootools und jQuery haben Javascript für Designer unglaublich zugänglich gemacht. Wenn Sie in diese Kategorie fallen, empfehle ich dringend, dass Sie ein reines Javascript-Buch abholen. Meines Erachtens ist es nicht falsch, gleichzeitig zu lernen. Seien Sie einfach sicher, dass Sie beides lernen!


Es ist vergleichbar mit der Arbeit mit WordPress, wenn Sie PHP nicht kennen. Sicher ist es möglich - aber möchten Sie das wirklich??

Hoffentlich sollte dies Sie zum Laufen bringen! Ich würde gerne deine Gedanken hören! Habe ein schönes Wochenende. Wir sehen uns am Montag oder auf Twitter!

  • Abonnieren Sie den NETTUTS-RSS-Feed für mehr tägliche Webentwicklungsberichte und -artikel.