2012-04-04 16 views
11

starałem się dostać PJAX pracy z mojej strony PHP, jest to kod używam do niego:Jak korzystać z PJAX? (? PJAX Z 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> 

jestem tylko przy użyciu kodu one używane na stronie demo PJAX , ale zastąpienie kontenera, którego użyli (#main), z tym dla mojej witryny, który był tagiem sekcji. Nie ma błędów na konsoli ani na stronie, ale to też nie działa! Przed używałem

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

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

Ale kiedy nie używać żadnej z tych i po prostu użyć $ ('ul a'). Pjax ('sekcja') widzę tego błędu w konsola:

Uncaught nie pojemnik pjax dla sekcji w jquery.pjax.js (linia: 353)

mógłbym dostać jakąś pomoc z tym? Dzięki

+0

Czy twoja strona ma w sobie znacznik '

'? Czy Twój serwer zwraca zawartość bez zawartości chrome, gdy wysyłany jest nagłówek "X-PJAX" lub "_pjax"? Czy możesz utworzyć link do adresu demo? –

+0

Właściwie nie byłem w stanie załadować plików PHP, ale wypróbowałem dokładnie to samo z prostymi, zwykłymi plikami html, ale wciąż to samo. Możesz to zobaczyć tutaj: http://sbtest.comoj.com – user1302430

+0

W tej witrynie testowej zamień swoje wywołanie pjax na '$ (function() {$ ('ul a') .pjax (" # main ", {fragment : "#main"});}); '. Lub umieść połączenie u dołu strony. –

Odpowiedz

10

Domyślnie, pjax oczekuje, że nowe strony będą dostarczane bez chrome - fragment kodu HTML, który będzie używany jako innerHTML kontenera.

W twoim przykładzie pojemnik byłby pierwszym tagiem <section>, który przypuszczam. Nie wiem, czy pjax gwarantuje, że użyje pierwszego elementu pasującego do selektora - może po prostu zastąpić każdy pasujący element. Prawdopodobnie lepiej byłoby użyć selektora ID, takiego jak #main.

W każdym razie wygląda na to, że nie dostarczałeś fragmentów kodu HTML, a tylko całą stronę. To prawie pokonuje cel pjax, ale może być wspierane przez określenie fragmentu w pobranej treści. Prawie zawsze będzie to selektor pasujący do kontenera, który zostanie wymieniony.

Więc zakładając użyć pojemnik z @id=main można nazwać pjax z

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

Upewnij się, że pjax jest wywoływana po załadowaniu dokumentu, w przeciwnym razie wyszukiwanie pojemnik zawiedzie.

Nawiasem mówiąc, łatwiejszym sposobem na przejście do nawigacji wspomaganej pushState jest mój projekt HTMLDecor. Wymaga to zmiany punktu widzenia na generowanie stron HTML, ale kiedy już to zrobisz, wystarczy dodać skrypt HTMLDecor.js do swoich stron, a pushState zostanie automatycznie użyty w razie potrzeby - bez potrzeby konfiguracji.