Heim Web-Frontend js-Tutorial Ajax und HTML5 ändern die Seiten-URL ohne Aktualisierung

Ajax und HTML5 ändern die Seiten-URL ohne Aktualisierung

Nov 22, 2016 pm 01:59 PM
ajax html5

Leistung

Wenn Sie Chrome oder Firefox und andere Browser zum Besuch dieses Blogs, github.com, plus.google.com und anderer Websites verwenden und vorsichtig sind, werden Sie feststellen, dass es zu Klicks zwischen den Seiten kommt werden asynchron über Ajax angefordert und gleichzeitig hat sich die URL der Seite geändert. Und es kann den Browser vorwärts und rückwärts sehr gut unterstützen.

Was hat eine so mächtige Funktion?

HTML5 referenziert die neuen APIs „history.pushState“ und „history.replaceState“, die zum Ändern der Seiten-URL ohne Aktualisierung verwendet werden.

Unterschiede zum herkömmlichen AJAX

Traditionelles Ajax weist die folgenden Probleme auf:

1. Der Seiteninhalt kann ohne Aktualisierung geändert werden, die Seiten-URL kann jedoch nicht geändert werden

2. Zur besseren Zugänglichkeit wird der Hash der URL normalerweise geändert

3 Die Hash-Methode kann die Vorwärts- und Rückwärtsprobleme des Browsers nicht gut bewältigen

4. Darüber hinaus hat der Browser die Onhashchange-Schnittstelle eingeführt. Browser, die diese nicht unterstützen, können nur in regelmäßigen Abständen feststellen, ob sich der Hash geändert hat

5. Diese Methode ist jedoch für Suchmaschinen sehr unfreundlich

. Twitter und Google haben sich darauf geeinigt, #!xxx zu verwenden (das heißt, das erste Zeichen von Hash ist!), und Suchmaschinen unterstützen dies.

Um die durch herkömmliches Ajax verursachten Probleme zu lösen, wurden in HTML5 neue APIs eingeführt, nämlich: History.pushState, History.replaceState

Sie können den Browserverlauf über PushState und bedienen replaceState-Schnittstellen und Ändern der URL der aktuellen Seite.

pushState dient dazu, die angegebene URL zum Browserverlauf hinzuzufügen, und replaceState dient dazu, die aktuelle URL durch die angegebene URL zu ersetzen.

So verwenden Sie

var state = {
    title: title,
    url: options.url,
    otherkey: othervalue
};
window.history.pushState(state, document.title, url);
Nach dem Login kopieren

Zusätzlich zum Titel und der URL können Sie dem Statusobjekt auch andere Daten hinzufügen. Beispielsweise möchten Sie auch einige Konfigurationen für den Ajax-Versand speichern .

replaceState und pushState sind ähnlich, daher werde ich sie hier nicht vorstellen.

So reagieren Sie auf die Vorwärts- und Rückwärtsoperationen des Browsers

Das onpopstate-Ereignis wird für das Fensterobjekt bereitgestellt. Das oben übergebene Statusobjekt wird zu einem Unterobjekt des Ereignisses, sodass Sie kann den gespeicherten Titel und die URL abrufen.

window.addEventListener('popstate', function(e){
    if (history.state){
        var state = e.state;
        //do something(state.url, state.title);
    }
}, false);
Nach dem Login kopieren

Auf diese Weise können Sie Ajax und PushState für perfektes, aktualisierungsfreies Surfen kombinieren.

Einige Einschränkungen

1 Die übergebene URL muss in derselben Domäne liegen und darf keine Domänen überschreiten

2. Obwohl das Statusobjekt viele benutzerdefinierte Attribute speichern kann, handelt es sich um Objekte die nicht serialisierbar sind, können nicht gespeichert werden, wie zum Beispiel DOM-Objekte.

Entsprechend einer Verarbeitung im Backend

In diesem Modus muss zusätzlich zur Verwendung von Ajax zum Durchsuchen ohne Aktualisierung auch sichergestellt werden, dass die geänderte URL nach direkter Anfrage normal durchsucht werden kann es, also muss das Backend diesen Behandlungen unterliegen.

1. Senden Sie einen speziellen Header an Ajax mit pushState, wie zum Beispiel: setRequestHeader(‘PJAX’, ‘true’).

2. Wenn das Backend den Header mit PJAX=true erhält, werden die gemeinsamen Teile der Seite nicht ausgegeben. Beispiel: PHP kann Folgendes beurteilen:

function is_pjax(){
    return array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX'] === 'true';
}
Nach dem Login kopieren

Obwohl es auf der Schnittstelle nur pushState, replaceState und onpopstate gibt, muss bei der Verwendung viel Verarbeitung durchgeführt werden.

Hierfür wurde ein auf jquery basierendes Plug-in geschrieben und ajax History.pushState wurde in pjax gekapselt. Projektadresse: https://github.com/welefen/pjax. Unterstützt derzeit jquery und qwrap , Kissy 3-Versionen

Wenn Sie außerdem die Auswirkungen von HTML4 und HTML5 berücksichtigen möchten, können Sie sich auf History.js beziehen. Die Projektadresse lautet: https://github.com/browserstate/history .js.

Referenzmaterialien:

Einführung in die HTML5-Verlaufs-API

2. Sitzungsverlauf und Navigation

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Tabellenrahmen in HTML Tabellenrahmen in HTML Sep 04, 2024 pm 04:49 PM

Anleitung zum Tabellenrahmen in HTML. Hier besprechen wir verschiedene Möglichkeiten zum Definieren von Tabellenrändern anhand von Beispielen für den Tabellenrand in HTML.

HTML-Rand links HTML-Rand links Sep 04, 2024 pm 04:48 PM

Anleitung zum HTML-Rand links. Hier besprechen wir einen kurzen Überblick über HTML margin-left und seine Beispiele sowie seine Code-Implementierung.

Verschachtelte Tabelle in HTML Verschachtelte Tabelle in HTML Sep 04, 2024 pm 04:49 PM

Dies ist eine Anleitung für verschachtelte Tabellen in HTML. Hier diskutieren wir anhand der entsprechenden Beispiele, wie man eine Tabelle innerhalb der Tabelle erstellt.

HTML-Tabellenlayout HTML-Tabellenlayout Sep 04, 2024 pm 04:54 PM

Leitfaden zum HTML-Tabellenlayout. Hier besprechen wir die Werte des HTML-Tabellenlayouts zusammen mit den Beispielen und Ausgaben im Detail.

HTML-Eingabeplatzhalter HTML-Eingabeplatzhalter Sep 04, 2024 pm 04:54 PM

Leitfaden für HTML-Eingabeplatzhalter. Hier besprechen wir die Beispiele für HTML-Eingabeplatzhalter zusammen mit den Codes und Ausgaben.

HTML-geordnete Liste HTML-geordnete Liste Sep 04, 2024 pm 04:43 PM

Leitfaden zur HTML-geordneten Liste. Hier besprechen wir auch die Einführung von HTML-geordneten Listen und Typen sowie deren Beispiele

Text in HTML verschieben Text in HTML verschieben Sep 04, 2024 pm 04:45 PM

Anleitung zum Verschieben von Text in HTML. Hier besprechen wir eine Einführung, wie Marquee-Tags funktionieren, mit Syntax und Beispielen für die Implementierung.

HTML-Onclick-Button HTML-Onclick-Button Sep 04, 2024 pm 04:49 PM

Anleitung zum HTML-OnClick-Button. Hier diskutieren wir deren Einführung, Funktionsweise, Beispiele und Onclick-Events in verschiedenen Veranstaltungen.

See all articles