2012-04-04 9 views
11

Ich habe versucht, mit meiner PHP-Website zu bekommen PJAX arbeiten, dies ist der Code, den ich für sie bin mit:Wie benutzt man PJAX? (? PJAX Mit PHP)

<script src="js/jquery.js"></script> 
<script src="js/jquery.pjax.js"></script> 
    <script type="text/javascript"> 
     $(function(){ 
      // pjax 
      $('ul a').pjax('section') 
     }) 
    </script> 

ich nur den Code verwenden sie auf der PJAX Demo-Seite verwendet , aber den verwendeten Container (#main) durch den für meine Site ersetzen, der das Abschnitts-Tag war. Es gibt keine Fehler auf der Konsole oder auf der Seite, aber es funktioniert auch nicht! Bevor ich wurde mit

$(function() { $('ul a').pjax('section') }); und

$('document').ready(function(){ 
    $('ul a').pjax('section') 
}); 

Aber wenn ich es auch nicht von denen, verwenden und nur verwenden $ ('ul a'). Pjax ('Abschnitt') Ich sehe diesen Fehler in die Konsole:

Uncaught keinen pjax Behälter für Abschnitt in jquery.pjax.js (Linie 353)

Kann ich etwas Hilfe mit dieser bekommen? Danke

+0

Ist Ihre Seite ein ''

Tag in es haben? Gibt Ihr Server chrome-losen Inhalt zurück, wenn der X-PJAX-Header oder der _pjax-Suchparameter gesendet wird? Kannst du auf eine Demo-URL verlinken? –

+0

Eigentlich konnte ich die PHP-Sachen nicht hochladen, aber ich habe genau dasselbe mit einfachen HTML-Dateien versucht, aber immer noch das Gleiche. Sie können dies hier sehen: http://sbtest.comoj.com – user1302430

+0

In diesem Testfeld, ersetzen Sie pjax Anruf mit '$ (function() {$ ('ul a') pjax ("# main", {Fragment. : "#main"});}); '. Oder setzen Sie den Anruf am unteren Rand der Seite. –

Antwort

10

Standardmäßig erwartet pjax, dass neue Seiten ohne chrome ausgeliefert werden - ein HTML-Snippet, das als innerHTML des Containers verwendet wird.

In Ihrem Beispiel wäre der Behälter das erste <section> Tag nehme ich an. Ich weiß nicht, ob pjax garantiert, dass es das erste Element verwendet, das einem Selektor entspricht - es kann nur jedes passende Element ersetzen. Wahrscheinlich wäre es besser, einen ID-Selektor zu verwenden, wie #main.

Wie dem auch sei, es klingt wie Sie nicht HTML-Schnipsel zu liefern waren, sondern nur die ganze Seite. Dadurch wird der Zweck von pjax fast zunichte gemacht, aber es kann durch Angabe eines Fragments im heruntergeladenen Inhalt unterstützt werden. Fast immer wird dies ein Selektor sein, der zu dem Container passt, der ersetzt wird.

Also, vorausgesetzt, verwenden Sie einen Container mit @id=main Sie pjax mit

$(function() { $("ul a").pjax("#main", { fragment: "#main" }); }); 

Vergewissern Sie sich, dass pjax nach dem Dokument Lasten genannt nennen könnte, da sonst der Container-Lookup fehlschlagen.

By the way, einen einfacheren Weg zu pushstate unterstützt Navigation zu wechseln ist mit meinem HTMLDecor Projekt. Sie müssen Ihre Perspektive beim Generieren von HTML-Seiten ändern, aber sobald Sie das erledigt haben, müssen Sie nur noch das Script HTMLDecor.js zu Ihren Seiten hinzufügen und pushState wird automatisch verwendet, wenn es angemessen ist - keine Konfiguration erforderlich.