Maison interface Web js tutoriel Utilisez ajax pour modifier le contenu de la page et l'URL de la barre d'adresse sans actualiser

Utilisez ajax pour modifier le contenu de la page et l'URL de la barre d'adresse sans actualiser

May 25, 2018 am 11:52 AM
ajax 刷新 改变

Cet article présente principalement en détail la méthode d'utilisation d'ajax et window.history.pushState pour modifier le contenu de la page et l'URL de la barre d'adresse sans actualiser. Les amis dans le besoin peuvent s'y référer

Lors de la visite du désormais populaire. Google Plus, les utilisateurs prudents peuvent constater que les clics entre les pages sont demandés de manière asynchrone via ajax et que l'URL de la page change en même temps. Et il peut très bien prendre en charge l'avant et l'arrière du navigateur. Les gens ne peuvent s’empêcher de se demander : qu’est-ce qui a une fonction si puissante ?

HTML5 référence de nouvelles API, à savoir history.pushState et history.replaceState C'est grâce à cette interface que l'URL de la page peut être modifiée sans actualisation.

Différences par rapport à l'AJAX traditionnel

L'ajax traditionnel présente les problèmes suivants :

Bien que l'ajax puisse modifier le contenu de la page sans l'actualiser, il ne peut pas être modifié. URL de la page

Deuxièmement, pour une meilleure accessibilité, modifiez le hachage de l'URL après les modifications du contenu. Cependant, la méthode de hachage ne peut pas très bien gérer les problèmes d'avant et d'arrière du navigateur

Certains navigateurs ont introduit l'interface onhashchange. Les navigateurs qui ne la prennent pas en charge ne peuvent déterminer que périodiquement si le hachage a changé

. De plus, l'utilisation d'ajax est très peu conviviale pour les moteurs de recherche, et les zones explorées par les robots sont souvent vides

Afin de résoudre les problèmes causés par l'ajax traditionnel, une nouvelle API a été introduite en HTML5, à savoir : history .pushState, history.replaceState

Vous pouvez utiliser l'historique du navigateur via les interfaces pushState et replaceState et modifier l'URL de la page actuelle.

pushState consiste à ajouter l'URL spécifiée à l'historique du navigateur, et replaceState consiste à remplacer l'URL actuelle par l'URL spécifiée.

Comment appeler

var state = {
 title: title,
 url: options.url,
 otherkey: othervalue
};
window.history.pushState(state, document.title, url);
Copier après la connexion

En plus du titre et de l'url, l'objet state peut également ajouter d'autres données, par exemple : vous souhaitez également envoyer du ajax configurations Enregistrez-le.

replaceState et pushState sont similaires et aucune explication supplémentaire n'est nécessaire.

Comment répondre aux opérations avant et arrière du navigateur

L'événement onpopstate est fourni sur l'objet window L'objet state passé ci-dessus deviendra un sous-objet de l'événement, afin que vous puissiez le faire. peut obtenir le titre et l'URL stockés.

window.addEventListener('popstate', function(e){
  if (history.state){
 var state = e.state;
    //do something(state.url, state.title);
  }
}, false);
Copier après la connexion

De cette façon, vous pouvez combiner ajax et pushState pour une navigation parfaite sans actualisation.

Quelques restrictions

1 Il est inévitable qu'il ne puisse pas traverser de domaine. Pour citer un dicton classique que j'ai vu une fois sur Internet : "Si javascript peut traverser des domaines, alors cela peut être incroyable !" 2 Bien que l'objet d'état puisse stocker de nombreux attributs personnalisés, la valeur ne peut pas être un objet. .

Correspond à certains traitements back-end

Dans ce mode, en plus d'utiliser ajax pour naviguer sans rafraîchir, il faut également s'assurer que la navigation normale peut également être effectué après avoir demandé directement l'URL modifiée, le backend doit donc les gérer.

1. Un en-tête spécial peut être envoyé à ajax combiné avec pushState, tel que : setRequestHeader('PJAX', 'true').

2. Lorsque le backend obtient l'en-tête avec PJAX=true, les parties communes de la page ne seront pas affichées. Par exemple : PHP peut juger à travers les éléments suivants

Bien que l'interface n'ait que pushState, replaceState et onpopstate, elle nécessite encore beaucoup de traitement lors de son utilisation.
function is_pjax(){
 return array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX'] === 'true';
}
Copier après la connexion

Ce qui précède est ce que j'ai compilé pour vous. J'espère que cela vous sera utile à l'avenir.

Articles connexes :

Comment résoudre le problème d'échec ajax sur le navigateur Google Chrome

Cliquez sur chargement basé sur ajax pour en savoir plus non -rafraîchir le chargement Allez sur cette page

Deux solutions aux problèmes inter-domaines Ajax

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

6 façons d'actualiser les pages Web sur iPhone 6 façons d'actualiser les pages Web sur iPhone Feb 05, 2024 pm 02:00 PM

6 façons d'actualiser les pages Web sur iPhone

La touche d'actualisation F5 ne fonctionne pas sous Windows 11 La touche d'actualisation F5 ne fonctionne pas sous Windows 11 Mar 14, 2024 pm 01:01 PM

La touche d'actualisation F5 ne fonctionne pas sous Windows 11

Comment modifier le prix de livraison de départ de la version marchand de Meituan Takeout Comment modifier le prix de livraison de départ de la version marchand de Meituan Takeout Mar 27, 2024 pm 07:20 PM

Comment modifier le prix de livraison de départ de la version marchand de Meituan Takeout

Comment résoudre l'erreur 403 rencontrée par la requête jQuery AJAX Comment résoudre l'erreur 403 rencontrée par la requête jQuery AJAX Feb 20, 2024 am 10:07 AM

Comment résoudre l'erreur 403 rencontrée par la requête jQuery AJAX

Comment résoudre l'erreur 403 de la requête jQuery AJAX Comment résoudre l'erreur 403 de la requête jQuery AJAX Feb 19, 2024 pm 05:55 PM

Comment résoudre l'erreur 403 de la requête jQuery AJAX

Comment actualiser rapidement une page Web ? Comment actualiser rapidement une page Web ? Feb 18, 2024 pm 01:14 PM

Comment actualiser rapidement une page Web ?

Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Mar 09, 2024 pm 05:36 PM

Comment obtenir des variables de la méthode PHP en utilisant Ajax ?

Comment résoudre le problème de l'erreur 403 jQuery AJAX ? Comment résoudre le problème de l'erreur 403 jQuery AJAX ? Feb 23, 2024 pm 04:27 PM

Comment résoudre le problème de l'erreur 403 jQuery AJAX ?

See all articles