Ajax - przeładowanie strony

Witam,

posiadam skrypt, do wyświetlania aktualności na stronie. Prosty system zrobiony w php.

Działa to w ten sposób, że wyświetlane jest domyślnie 5 aktualności. Jeżeli w bazie jest ich więcej, generowane są przyciski z odnośnikami np.

Strona 3

Kategoria 1
Kategoria 2
Kategoria 3

a pole, w którym wyświetlają się newsy to

[/code] i teraz po kliknięciu kategorii mam coś takiego, że ładuje mi stronę z wynikami z pliku zapytanie.php

[code]$(’#kat1’).click(function(){ $(’#ajax_content’).load(‘zapytanie.php?kategoria=1&page=1’); }); $(’#kat2’).click(function(){ $(’#ajax_content’).load(‘zapytanie.php?kategoria=2&page=1’); }); $(’#kat3’).click(function(){ $(’#ajax_content’).load(‘zapytanie.php?kategoria=3&page=1’); });

I to wyświetla poprawnie te pierwsze 5 aktualności z danej kategorii. Problem zaczyna się gdy chcę przeładować jeszcze tą stronę, która jest wczytana już w tego diva (id="ajax_content), bo jeżeli są tworzone przyciski w formie odnośników (strona 1, strona 2, strona 3 itd.), nie przeładowują się w tym boxie, tylko przekierowują na nową stronę. Czyli klikając ‘strona 2’ otwiera się nowa strona /zapytanie.php?kategoria=1&page=2, a mi zależy na tym, żeby ta strona też dynamicznie wczytała się w tym divie.

Nie dziwi mnie ta sytuacja, że następuje to przekierowanie, natomiast nie wiem jak rozwiązać ten problem, bo jeżeli by to była stała ilość informacji do wyświetlenia, zrobiłbym troche więcej kodu w jquery i zrobił statyczne te odnośniki, natomiast w momencie gdy tych newsów przybywa, automatycznie zwiększa się ilość odnośników (strona 1, strona 2 itd.)

Próbowałem już te przyciski z numerami stron zrobić jako odnośniki, elementy formularza, robiłem dla każdego przycisku osobny formularz z przypisanym wartością value=“numer_strony”, ale w momencie wygenerowania tego w pliku zapytanie.php i wczytaniu poprzez jquery load, jest to wyświetlane na stronie, natomiast nie widać tego w źródle (źródło pokazuje, żę div id=“ajax_content” jest pusty) i nawet statyczne odniesienie się do tych przycisków było niemożliwe z poziomu pliku aktualnosci.php.

Mam nadzieję, że sytuacja, którą opisałem jest w miarę zrozumiała.

Za wszelkie odpowiedzi dziękuję.

Pozdrawiam, hoobert.

To 1, 2, 3… to linki (), czy divy? Jeśli linki, to dodaj przy onclick return false.

Aktualnie jest to link, ale może to być cokolwiek (button, div).

Generalnie chodzi o to, żeby dane wczytywały się na bieżąco, czyli zależnie od parametru $_GET[‘page’].

Z tym zdarzeniem onclick to mógłbyś rozwinąć jakoś ten pomysł?

Jeśli to link, to musisz wywołać metodę preventDefault() zdarzenia.

Jeśli w kodzie dodawanym do strony znajdują się te “ajaxowe linki”, .click() musisz użyć po ich wstawieniu (albo zainteresować się .live())

Mam takie pytanie: nie wolałbyś zrobić pagera w PHP? Poprzez Ajax lista aktualności nie będzie indeksowana w wyszukiwarkach, a według mnie jest to dosyć ważna sprawa.

cayman3_11 dzięki za pomysł, live() rzeczywiście powinno rozwiązać mój problem.

Co do indeksowania tych aktualności w wyszukiwarkach, to nie wiem czy to jest aż tak bardzo mi potrzebne. Tematyka wiadomości na stronie jest przeznaczona raczej dla niewielkiej, określonej ilości osób i nie przypuszczam, żeby ktokolwiek tego szukał w wyszukiwarce :smiley:

Dzięki za pomoc.

Pozdrawiam.

Osobiście zrobiłbym zwykłe linki z dopisaną klasą (np. “ajax”), które u klientów z niedostępnym JS działałyby w zwyczajny sposób. Natomiast jeśli skrypty byłyby aktywne to dodałyby listenera kliknięć (np. poprzez .live()), który wysyłałby zapytanie ajaxem pod adres z atrybutu href, i zapobiegały domyślnemu zachowaniu linków (event.preventDefault()).

Potem zostaje tylko rozróżnienia tych zapytań po stronie serwera (w przypadku ajaxa nagłówek x-requested-with ma chyba wartość xmlhttprequest) i wysyłanie albo kompletnego kodu strony albo tylko fragmentu do doklejenia.

Rozwiązałoby to nie tylko problem indeksowania, ale także pozwoliłoby na przeglądanie strony przy braku/wyłączonej obsłudze skryptów.

jQuerowy load ma przecież możliwość wycięcia kawalka kodu HTML i tylko ten fragment jest ladowany do wybranego elementu.

Tak ma, lecz wysyłanie całej strony i przycinanie w js nie ma sensu gdyż marnuje się w ten sposób jedynie transfer i czas użytkownikom z wolniejszym łączem.