Heim >Web-Frontend >js-Tutorial >Zusammenfassung eines einfachen jQuery-Pjax-Beispiels
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,
<!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>
res1.php
<?php echo "<p style='background:red;'>第一页</p>";
res2. php
<?php echo "<p style='background:red;'>第二页</p>";
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,
<!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>
Serverseitiger Code:
res3.php:
<?php echo "<p style='background:red;'>第三页</p>";
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:
<!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); //改变URL和添加返回历史 document.title = data.title; //设置标题 $('#main').html(data.main); //设置内容 } }); } else { return; //低版本IE8等不支持HTML5 pushState,直接返回进行链接跳转 } }); }); </script> </p> </body> </html>
Beispiel 2:
<?php if(isset($_GET['pjax'])) { //PJAX请求返回JSON $arr['title'] = 'Data'; $arr['main'] = '<h1>Data Content</h1>'; //下面这两句是把PHP数组转成JSON对象返回 header('Content-Type: application/json; charset=utf-8'); echo json_encode($arr); } else { //常规请求返回HTML ?> <!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 } ?>
Servercode
<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(){ //最后一个需要添加一个last的样式 $(".brand-news-right li:last").addClass('last'); }) </script> </p> </p> </p>
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.
if(is_pjax()){ $this->display('article_pjax'); }else{ $this->display('article'); }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.
//判断是否是pjax请求 function is_pjax(){ return array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX']; }
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.
https://github.com/defunkt/jquery-pjax
Verwandte Empfehlungen:
Was ist PjaxVerwendung von Pjax in Laravel 5.1Navigationsleiste 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!