Nachdem Sie die vorherigen drei Tutorials durchlaufen haben, sollten Sie sich mit AJAX gut auskennen. In diesem abschließenden Lernprogramm werden wir die Dinge mit einem ausführlicheren Beispiel abschließen.
Um einen Eindruck von der Struktur dieses Beispiels zu erhalten, betrachten Sie die folgende Markierung:
Das Markup für die Main
Element wird unten gezeigt:
Beliebte Frontend-Frameworks
Klicken Sie auf jeden, um Details über AJAX zu laden.
Bootstrap Foundation UIkit Semantic UI Skeleton Material Design Lite
Beachten Sie die Textlinks. Diese entsprechen unterschiedlichen Front-End-Frameworks. Wie wir im nächsten Abschnitt sehen werden, wird jedes Mal, wenn wir auf die Links klicken, eine AJAX-Anfrage ausgeführt. Dann das Element mit der Klasse von modal
erscheint und der Inhalt wird mit den aus der Antwort abgerufenen Daten aktualisiert.
Hier ist wie das Main
Element sieht so aus:
Der nächste Schritt besteht darin, die Struktur unseres Modals zu untersuchen. Hier ist der HTML-Code:
- Rahmen
- Aktuelle Version
- Anzahl der Github-Sterne
- Offizielle Seite
Wie Sie sehen, enthält das Modal einige leere Elemente. Wir fügen diese in den HTML-Code ein, da sich ihr Text je nach dem Link, auf den wir klicken, und der Antwort, die wir abrufen, ändert.
Das Bild unten zeigt, wie der Modal anfänglich erscheint:
Standardmäßig ist das Modal ausgeblendet. Zusätzlich verstecken wir den Loader. Dies wird nur angezeigt, wenn die AJAX-Anfrage ausgelöst wird.
Schauen Sie sich die entsprechenden CSS-Regeln an:
.modale Opazität: 0; .loader display: none;
Beachten Sie, dass wir das verwenden Opazität
Eigentum (und nicht die Anzeige
property), um das Modal auszublenden, da diese Eigenschaft zu den animierbaren CSS-Eigenschaften gehört. Auf diese Weise können wir die Modalzustände (d. H. Die offenen und geschlossenen Zustände) wechseln..
In diesem Beispiel erstellen wir die JSON-Antwort selbst. Insbesondere die erwartete Antwort (d. H Demo.json
Datei) ist ein Array von Objekten. Jedes Objekt enthält Details zu den zugehörigen Front-End-Frameworks.
Darüber hinaus ist der Wert von Name
Die Eigenschaft entspricht den Textlinks der Main
Element (siehe vorherigen Abschnitt). In diesem Sinne sieht die Struktur der Antwort in etwa so aus:
["url": "http://getbootstrap.com/", "numberOfStars": "88.260+", "currentVersion": "3.3.5", "name": "Bootstrap", "url": "http://foundation.zurb.com/", "numberOfStars": "21.180+", "currentVersion": "5.5.3", "name": "Foundation", // 4 weitere Objekte hier]
Hinweis: die Werte, die wir für verwendet haben numberOfStars
und aktuelle Version
Eigenschaften sind unecht und nur zu Demonstrationszwecken.
Ähnlich wie in den vorherigen Beispielen dieser Serie verwenden wir AJAX, um eine statische Datei anzufordern. Wenn Sie jedoch Inhalte von anderen Websites (z. B. Google Maps, Flickr) einbetten möchten, sollten Sie deren API-Dokumentation lesen und gegebenenfalls einen API-Schlüssel beantragen.
Darüber hinaus befinden sich unsere Zieldaten auf demselben Server wie die Demoseite. Daher vermeiden wir Einschränkungen, die bei der Interaktion mit Diensten von Drittanbietern auftreten können (siehe Abschnitt "Einschränkungen von AJAX-Anforderungen" des ersten Lernprogramms)..
In diesem Abschnitt verwenden wir jQuery's Ajax
Funktion zum Initialisieren einer AJAX-Anfrage. Bevor wir dies tun, definieren wir zuerst unsere Variablen durch Zwischenspeichern der am häufigsten verwendeten jQuery-Selektoren:
var $ list = $ ('. m-info'), var $ message = $ ('. m-message'); var $ modal = $ ('. modal'); var $ loader = $ ('. loader'); var $ framework;
Nun ist es an der Zeit, den Code zu untersuchen, der für die Ausführung der Anfrage verantwortlich ist:
$ ('.Boxen a'). on ('click', Funktion (e) e.preventDefault (); $ framework = $ (this) .text (); $ .ajax (url: 'Demo.json') , dataType: 'json', beforeSend: function () $ loader.show ();. done (successFunction) .fail (errorFunction) .always (alwaysFunction););
Sie werden die Syntax für die Ajax
Funktion sieht wie folgt aus:
$ .ajax ([Einstellungen])
Das die Einstellungen
Parameter ist ein Konfigurationsobjekt, das Informationen zu unserer Anfrage enthält. Die Anzahl der Eigenschaften, die dieses Objekt haben kann, ist sehr lang (ca. 34 Eigenschaften). Der Einfachheit halber werden nur die in dieser Demo verwendeten besprochen. Genauer:
Eigentum | Beschreibung |
---|---|
url | Eine Zeichenfolge, die die URL enthält, an die die Anforderung gesendet wird. |
Datentyp | Das Format der Antwortdaten (z. Json , xml , html ). |
beforeSend | Eine Rückruffunktion, die ausgeführt wird, bevor wir die Anfrage senden. Hier löst diese Funktion den Code aus, der den Loader anzeigt. |
Bevor wir fortfahren, sollten wir drei Dinge erwähnen:
Ajax
Funktion: $ .ajax (URL [, Einstellungen])
die Einstellungen
Parameter sind optional.ERHALTEN
.Das Ajax
Die Funktion gibt das jQuery-Objekt XMLHttpRequest oder jqXHR zurück. Dieses Objekt implementiert die Promise-Schnittstelle und enthält daher alle Eigenschaften, Methoden und Verhalten einer Promise.
In diesem Beispiel verwenden wir die folgenden Promise-Methoden:
erledigt
Scheitern
immer
Das erledigt
Methode wird ausgelöst, wenn die Anforderung erfolgreich ist. Es empfängt ein oder mehrere Argumente, die entweder eine einzelne Funktion oder ein Array von Funktionen sein können. Zum Beispiel in unserer Demo die successFunction ()
wird als Argument übergeben.
Die Rückruffunktion (z. successFunction ()
) akzeptiert drei Argumente. Zuerst die zurückgegebenen Daten. Zweitens eine Zeichenfolge, die den Status der Anforderung kategorisiert (die möglichen Werte finden Sie im vorherigen Artikel). Zuletzt das Objekt jqXHR.
Das Scheitern
Methode wird aufgerufen, wenn die Anforderung fehlschlägt. Es empfängt ein oder mehrere Argumente, die entweder eine einzelne Funktion oder ein Array von Funktionen sein können. Zum Beispiel in unserer Demo die errorFunction ()
wird als Argument übergeben.
Die Rückruffunktion (z. errorFunction ()
) akzeptiert drei Argumente: das Objekt jqXHR, eine Zeichenfolge, die den Status der Anforderung kategorisiert, und eine weitere Zeichenfolge, die den resultierenden Fehler angibt. Dieser Fehler empfängt den Textteil des HTTP-Status, z. B. Nicht gefunden
oder verboten
.
Das immer
Die Methode wird ausgeführt, wenn die Anforderung unabhängig vom Erfolg (d. h erledigt
Methode ausgeführt wird) oder Fehler (d. h Scheitern
Methode wird ausgeführt). Wieder erhält es als Argument eine einzelne Funktion oder ein Array von Funktionen. Zum Beispiel in unserer Demo die alwaysFunction ()
wird als Argument übergeben.
Der Status der Anforderung gibt die Argumente der Funktion an. Im Falle einer erfolgreichen Anfrage wird der Rückruf (z. alwaysFunction ()
) erhält die gleichen Argumente wie der Rückruf der erledigt
Methode. Im Gegenteil, wenn die Anfrage fehlschlägt, akzeptiert sie dieselben Argumente wie der Rückruf von Scheitern
Methode.
Hinweis: Anstatt der erledigt
, Scheitern
, und immer
Versprechende Methoden, die in diesem Beispiel verwendet werden, hätten wir auch gleich verwenden können Erfolg
, Error
, und Komplett
Callback-Funktionen. Diese Funktionen sind in definiert die Einstellungen
Parameter.
Wenn die Anforderung erfolgreich ist, können wir die Antwortdaten zurückholen. Dann manipulieren wir es, um die leeren Elemente des Modals aufzufüllen.
Betrachten Sie den Code für die Erfolgsfunktion
Ruf zurück:
Funktion successFunction (Daten) if (data.length> 0) für (var i = 0; i < data.length; i++) if ($framework === data[i].name) $list.show(); $message.hide(); $list.find('li:nth-of-type(2)').text($framework); $list.find('li:nth-of-type(4)').text(data[i].currentVersion); $list.find('li:nth-of-type(6)').text(data[i].numberOfStars); $list.find('li:nth-of-type(8)').html('' + data[i].url + ''); break; else $list.hide(); $message.show().text('No data received for this framework!'); else $list.hide(); $message.text('No data received from your respose!');
Obwohl wir den Inhalt unseres Modals aktualisiert haben, ist dieser immer noch verborgen. Es wird sichtbar und der Lader verschwindet, wenn die Anforderung abgeschlossen ist. Nur dann die immerFunktion
Rückruf wird ausgeführt:
function alwaysFunction () $ loader.hide (); $ modal.addClass ('active');
Das aktiv
Klasse sieht so aus:
.aktive Deckkraft: 1; z-Index: 10; verwandeln: Skala (1);
Unten sehen Sie das erwartete Erscheinungsbild des Modals, wenn Sie auf klicken Bootstrap
Textlink:
Es ist wichtig, den Code zu verstehen, der unter bestimmten Umständen ausgeführt wird. Lassen Sie uns zwei allgemeine Szenarien behandeln:
Name
Eigenschaft stimmt nicht mit den Textlinks der überein Main
Element. Nehmen wir zum Beispiel an, dass wir eine URL definieren, bei der der Wert von Name
Eigenschaft des Objekts, das sich auf das Foundation Framework bezieht, ist Stiftung2
anstatt Stiftung
. In einem solchen Fall klicken Sie auf die Schaltfläche Stiftung
Textlink erscheint der folgende Modal:Wir haben also den Code behandelt, der ausgelöst wird, wenn die Anforderung erfolgreich ist. Was passiert aber, wenn die Anfrage fehlschlägt? Bei einer nicht erfolgreichen Anfrage blenden wir die Liste aus und zeigen eine benutzerdefinierte Nachricht an.
Hier ist der Code von failFunction ()
was dieses Verhalten demonstriert:
function failFunction (request, textStatus, errorThrown) $ list.hide (); $ message.text ('Bei Ihrer Anfrage ist ein Fehler aufgetreten:' + request.status + "+ textStatus +" + errorThrown);
Um uns mit diesem Code vertraut zu machen, geben wir eine URL an, die nicht vorhanden ist. Daher die Scheitern
Die Methode wird ausgelöst und der folgende Modal wird angezeigt:
Hinweis: Wieder kann die Fehlermeldung anders sein, wenn Sie dieses Beispiel lokal ausführen.
Hier ist die eingebettete Codepen-Demo:
In diesem Tutorial haben wir die Prüfung von AJAX aus der Sicht eines Webdesigners abgeschlossen. Ich hoffe, dass Sie diese Serie als hilfreich empfanden und neue Fähigkeiten gelernt haben.
Als nächsten Schritt ermutige ich Sie, die folgenden Dinge zu untersuchen:
$ .getJSON
Methode).