Autor Wątek: Blokowanie przeładowania całej strony  (Przeczytany 1416 razy)

Offline TDM

  • Użytkownik

# Luty 23, 2017, 19:19:40
Cześć! Czy jest możliwość w przypadku jQuery bądź gołego JS'a zablokować możliwość przeładowania wybranego elementu strony ? Po kliknięciu w przycisk wykonuję on pewną animację a w tym czasie reszta strony "dostaje" nową zawartość, ale ten przycisk a raczej kilka przycisków są na każdej stronie więc nie ma sensu ich przeładowywać. Myślałem nad $.get ale ta funkcja nie zmienia mi zawartości linku w przeglądarce a to jest koniecznie ponieważ każdy przycisk powinien przesyłać odpowiednią zmienną do pliku php ( np. index.php?przycisk=1 )

Pozdrawiam

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline .c41x

  • Użytkownik
    • homepage

# Luty 23, 2017, 19:51:50
Ciężko mi zrozumieć o co ci chodzi. Co do ostatniej części pytania: wywołania AJAXowe nie modyfikują adresu url w przeglądarce, choć można wymusić taką zmianę pod warunkiem, że adres jest poprawnie ładowany z takiego adresu (tak działa np. google translate).

Offline TDM

  • Użytkownik

# Luty 23, 2017, 19:57:10
Mam na stronie div'a z przyciskami i jak przeładowuje stronę to nie chce żeby ten div się odświeżał

Offline dzemeuksis

  • Użytkownik
    • Blog quodmeturbat

# Luty 23, 2017, 22:33:44
To nie przeładowuj strony. Odświeżaj wyłącznie element, który podlega zmianie.

Offline TDM

  • Użytkownik

# Luty 24, 2017, 03:07:36
W jaki sposób to zrobić ?

Offline Xenox93

  • Użytkownik

# Luty 24, 2017, 17:31:33
Jeżeli używasz przeładowywania tylko po to, aby przesłać jakiś parametr/wartość/obiekt, to nie zastanawiałeś się nad JSON'em? Ogólnie AJAX również powinien spełnić swoją rolę oraz nie wiem jak to jest z REST/websocket, ale on również powinien pomóc. Pewności nie mam, ale bliżej skłaniałbym się ku AJAX'owi.

Offline dzemeuksis

  • Użytkownik
    • Blog quodmeturbat

# Luty 24, 2017, 18:32:00
Nie wiem jak to się powinno robić, ale mogę pokazać jak to zrobiłem u siebie. Obadaj gawedziarz.pl Jak zajrzysz w źródło to zobaczysz nieudolne javascrypty, które - przykładowo - podpinane są pod zdarzenie wciśnięcia jakiegoś buttona. I powodują wysłanie zapytania do API które zwraca dane w JSON. Po odebraniu JSON jest parsowany i po odpowiednim sformatowaniu wklejany do różnych kontrolek.
« Ostatnia zmiana: Luty 24, 2017, 20:51:46 wysłana przez dzemeuksis »

Offline TDM

  • Użytkownik

# Luty 24, 2017, 19:20:15
Mam stronę w index.php w tym pliku mam coś takiego:
<body>
<?php
         
if( isset($_GET['content']) ){ 
            if( 
$_GET['content'] == "opis")
            {
                 echo 
"opis strony";
                 
// Przeważnie tutaj będzie funkcja wczytująca tekst z pliku np. include "content/opis.php";
             
}
            if( 
$_GET['content'] == "tresc")
            {
                 echo 
"tresc";
                 
// Przeważnie tutaj będzie funkcja wczytująca tekst z pliku np. include "content/tresc.php";
             
}
             else
            {
                 echo 
"start";
                 
// Przeważnie tutaj będzie funkcja wczytująca tekst z pliku np. include "content/start.php";
            
}
}
?>

</body>
Klikając przycisk chcę zmienić zawartość strony na jedną z podanych w if'ie więc wychodzi na przeładowanie strony z parametrem np. index.php?content=tresc ale pasek nawigacyjny z przyciskami ma pewną animację i brzydko będzie to wyglądało w przypadku przeładowania strony. Parametr GET jest konieczny ponieważ ktoś może chciać wysłać komuś bezpośredniego linka do konkretnej zawartości strony. Więc pozostaje mi w jQuery/JS w funkcjach pozostawić dla oczu użytkownika strukturę plików na serwerze ? $("#content-div).load("content/start.php); ?
« Ostatnia zmiana: Luty 24, 2017, 19:36:07 wysłana przez TDM »

Offline .c41x

  • Użytkownik
    • homepage

# Luty 24, 2017, 20:51:11
np. tak:
   $.ajax({
       dataType: "json", // lub cokolwiek, moze byc czysty text
       url: "index.php?content=" + jakis_id,
       success: function(data) {
   $('#' + data.id).html(data.content);
       },
       error: function(a, b, c) {
   alert(b);
   alert(c);
       }
   });

z tym że nie zmieni to oczywiście url w przeglądarce (trzeba się dodatkowo o to postarać http://stackoverflow.com/questions/824349/modify-the-url-without-reloading-the-page).

\Więc pozostaje mi w jQuery/JS w funkcjach pozostawić dla oczu użytkownika strukturę plików na serwerze ? \
Nie koniecznie. Można użyć mod_rewrite jeśli korzystasz z Apache.