pjax ist ein jQuery-Plugin, das Ajax und PushState verwendet, um ein schnelles Surferlebnis zu erreichen, einschließlich echter Permalinks, Seitentitel und funktionierender Zurück-Schaltflächen. In diesem Artikel wird hauptsächlich eine Zusammenfassung einfacher Beispiele für jQuery Pjax mit Ihnen geteilt, in der Hoffnung, allen zu helfen.
Der Nachteil von Ajax besteht darin, dass es die Vorwärts- und Rückwärtsbewegung des Browsers zerstört, da Ajax-Anfragen nicht im Verlauf bleiben. Pjax ist anders. Pjax wird als Paket von Ajax + PushState interpretiert, da es Ajax-Anfragen in den Verlauf schreibt und sie in der Adressleiste widerspiegelt, sodass Benutzer problemlos vorwärts und rückwärts verwenden können. Es gibt mehrere Implementierungsmethoden für pjax. Die am häufigsten verwendete jQuery-Bibliothek wird hier verwendet: jquery.pjax.js. Die Serverseite des Democodes verwendet die Skriptsprache PHP.
Wo wird Pjax verwendet? Reden wir über Baidu Cloud Disk, das muss jeder schon einmal genutzt haben. Wenn Sie auf der PC-Seite von Baidu Cloud Disk zum Öffnen eines Ordners klicken, wird die Datei im Ordner geöffnet. Tatsächlich verwendet das p, das die Datei anzeigt, die Pjax-Technologie. Die Adressleiste ändert sich und der Inhalt ändert sich, es handelt sich jedoch um eine Ajax-Anfrage. Wenn Sie zurückgehen, müssen Sie den Inhalt des Ordners der oberen Ebene nicht erneut anfordern, da er im Verlauf vorhanden ist. Darüber hinaus können Entwickler auch die Verwendung von Cache- und Speicher-Caching wählen.
Beispiel 1,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <!DOCTYPE html>
<html>
<head>
<title>pjax</title>
<meta charset= "utf-8" >
</head>
<body>
<h1>My Site</h1>
<p>
Go to <a href= "res1.php" rel= "external nofollow" >第一页</a>.<a href= "res2.php" rel= "external nofollow" >第二页</a>
</p>
<p id= "container" ></p>
</body>
<script src= "../jquery-2.1.4.min.js" ></script>
<script src= "../jquery.pjax.js" ></script>
<script type= "text/javascript" >
$(document).pjax('a', '#container')
</script>
</html>
|
Nach dem Login kopieren
res1.php
1 2 | <?php
echo "<p style='background:red;'>第一页</p>" ;
|
Nach dem Login kopieren
res2. php
1 2 | <?php
echo "<p style='background:red;'>第二页</p>" ;
|
Nach dem Login kopieren
Erklärung:
$(document).pjax('a', '#Container')
wobei a das Triggerelement ist, #container der Container ist, der den von pjax zurückgegebenen Inhalt lädt, Das Gleiche gilt auch unten.
Beispiel 2,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <!DOCTYPE html>
<html>
<head>
<title>pjax</title>
<meta charset= "utf-8" >
</head>
<body>
<h1>My Site</h1>
<p>
<input type= "button" id= "clickMe" value= "GO" >
</p>
<p id= "container" ></p>
</body>
<script src= "../jquery-2.1.4.min.js" ></script>
<script src= "../jquery.pjax.js" ></script>
<script type= "text/javascript" >
$( function (){
$('#clickMe').click( function (){
$.pjax({
url: './res3.php',
container: '#container'
});
});
});
</script>
</html>
|
Nach dem Login kopieren
Serverseitiger Code:
res3.php:
1 2 | <?php
echo "<p style='background:red;'>第三页</p>" ;
|
Nach dem Login kopieren
Drei umfassende Anwendungen
window.history.pushState(state, title, url);
// https://developer.mozilla .org/zh-CN/docs/Web/API/History/pushState
// @State-Objekt: Ein zusätzliches Objekt, das historische Punkte aufzeichnet, kann leer sein.
// @Page-Titel: Derzeit nicht in allen Browsern unterstützt.
// @Optionale URL: Der Browser prüft nicht, ob die URL existiert, sondern ändert nur die URL. Die URL muss sich in derselben Domäne befinden und darf nicht domänenübergreifend sein.
PJAX ist Eigentlich HTML5-Fenster .history.pushState(state, title, url) Diese neue API plus traditionelle AJAX-Technologie wird im Allgemeinen verwendet, um das Laden von Seiten ohne Aktualisierung zu erreichen. Die Hauptfunktion von pushState besteht darin, die URL zu ändern und den Rückgabeverlauf hinzuzufügen. AJAX wird ohne Aktualisierung geladen. Nach Abschluss der Seite kann der Benutzer weiterhin normal vor- und zurückblättern, und window.history.back() und window.history.forward() von JS können auch normal funktionieren. Das Folgende ist ein Seitenladen ohne Aktualisierung pushState + jQuery AJAX. Browser, die es nicht unterstützen, kehren automatisch zum ursprünglichen Link-Öffnungsformular zurück .php:
Beachten Sie, dass der JS-Statistikcode im Hauptblock platziert werden sollte, um die Anzahl der Seitenbesuche richtig zu zählen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <!DOCTYPE html>
<html>
<head>
<meta charset= "utf-8" >
<title>Index</title>
<script src= "jquery.js" ></script>
</head>
<body>
<p id= "main" >
<a href= "data.php" rel= "external nofollow" >data.php</a>
<script>
$(document).ready( function () {
$('#main').on('click','a', function (e) {
if (window.history.pushState) {
e.preventDefault();
url = $(this).attr('href');
$.ajax({
async: true,
type: 'GET',
url: 'data.php',
data: 'pjax=1',
success: function (data) {
window.history.pushState(null, null, url);
document.title = data.title;
$('#main').html(data.main);
}
});
} else {
return ;
}
});
});
</script>
</p>
</body>
</html>
|
Nach dem Login kopieren
Beispiel 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php
if (isset( $_GET ['pjax'])) {
$arr ['title'] = 'Data';
$arr ['main'] = '<h1>Data Content</h1>';
header('Content-Type: application/json; charset=utf-8');
echo json_encode( $arr );
} else {
?>
<!DOCTYPE html>
<html>
<head>
<meta charset= "utf-8" >
<title>Data</title>
<script src= "jquery.js" ></script>
</head>
<body>
<p id= "main" ><h1>Data Content</h1></p>
</body>
</html>
<?php } ?>
|
Nach dem Login kopieren
Servercode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | <p class = "body" >
<?php $action_name = $Think .ACTION_NAME; ?>
<!-- 头部哟 -->
<?php if ( $action_name == 'news'): ?>
< include file= "Brand:header_news" />
<?php elseif ( $action_name == 'forum'): ?>
< include file= "Brand:header_forum" />
<?php endif ; ?>
<!-- 资讯的二级分类 -->
<p class = "cb" ></p>
<p class = "brand-news-nav pjax" >
<ul class = "clearfix" >
<li <?php if ( $_GET ['cat'] == '') echo ' class = "selected" '; ?>><a class = "first" href= "{:U(" Brand/ $action_name ")}" >全部</a></li>
<volist name= "cat_list" id= "vo" key= "i" >
<li <?php if ( $_GET ['cat'] == $vo ['id']) echo ' class = "selected" '; ?>><a href= "{:U(" Brand/ $action_name ",array('cat'=>$vo['id']))}" >{ $vo .name}</a></li>
</volist>
</ul>
</p>
<script type= "text/javascript" >
$( function (){
$(document).pjax('.pjax a', '#pjax-container',{
type:'post',
scrollTo:false,
});
$(document).on('pjax:click', function () {
enable_loading = false;
})
$(document).on('pjax:send', function (){
var str = "<p class='tc mt-10'>加载中...</p>" ;
$('#pjax-container').html(str);
})
$( ".brand-news-nav ul li" ).last().children('a').addClass('last');
$( ".brand-news-nav ul li" ).click( function (){
$(this).addClass('selected').siblings().removeClass('selected');
})
})
</script>
<!-- 文章列表页 -->
<p class = "wrap clearfix" >
<p class = "brand-news-list fl" id= "pjax-container" >
< include file= "Brand:article_pjax" />
</p>
<p class = "brand-news-right fr pb-20" >
<a href= "{$adv3[0]['url']}" ><img class = "scrollLoading" data-url= "{$adv3[0]['images']|showImagePath}" src= "__PUBLIC__/index/images/loading270x160.gif" width= "260" height= "150" ></a>
<p class = "title mt-10" >法律支持</p>
<ul class = "bgc-fff" >
<volist name= "law_list" id= "vo" >
<a href= "{:U('law',array('id'=>$vo['id']))}" ><li>{ $vo .name}</li></a>
</volist>
</ul>
<button class = "btn btn-right mt-10 btn-consult" >免费咨询</button>
<script type= "text/javascript" >
$( function (){
$( ".brand-news-right li:last" ).addClass('last');
})
</script>
</p>
</p>
</p>
|
Nach dem Login kopieren
Die Hauptidee besteht darin, beim Klicken auf .pjax den Inhalt des #pjax-Containers durch den angeforderten Inhalt zu ersetzen. Während der Back-End-Verarbeitung muss festgestellt werden, ob es sich um eine Pjax-Anfrage handelt, ob ein teilweises Rendering erforderlich ist und ob kein vollständiges Rendering erforderlich ist.
1 2 3 4 5 | if (is_pjax()){
$this ->display('article_pjax');
} else {
$this ->display('article');
}
|
Nach dem Login kopieren
Da pjax die HTML5-Technologie verwendet, springt die Website normal, wenn sie HTML5 nicht unterstützt. Wenn sie dies unterstützt, führt sie nur ein teilweises Rendering durch (aber die URL in der Adressleiste des Browsers). Normalerweise folgen Sie dem Link a, um Änderungen vorzunehmen.
Beachten Sie, dass es im obigen js-Code einen Parameter scrollTo:false gibt. Das Hinzufügen dieses Parameters bedeutet, dass sich die Bildlaufleiste der Webseite nach dem Klicken auf die Verbindung nicht ändert , jedes Mal, wenn Sie klicken, springt das Browserfenster automatisch zum Anfang der Webseite
1 2 3 4 | function is_pjax(){
return array_key_exists ('HTTP_X_PJAX', $_SERVER ) && $_SERVER ['HTTP_X_PJAX'];
}
|
Nach dem Login kopieren
Zusammenfassung: Pjax gibt tatsächlich einen Codeausschnitt vom Server zurück, ohne die Seite zu aktualisieren, und ändert gleichzeitig auch die URL-Adresse , wodurch das Laden von Ressourcen eingespart und die Geschwindigkeit beim Laden von Seiten verbessert werden kann.
Anhang: Github-Projektadresse von pjax
https://github.com/defunkt/jquery-pjax
Verwandte Empfehlungen:
Was ist Pjax
Verwendung von Pjax in Laravel 5.1
Navigationsleiste PJAX-Aktualisierungsproblem
Das obige ist der detaillierte Inhalt vonZusammenfassung eines einfachen jQuery-Pjax-Beispiels. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!