Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

Odświeżanie strony w AJAX


MIKEKING

Pytanie

Opublikowano

 Witam. Chcę zrobić "refresh content" próbowałem już z onclick return false; ale dokładnie nie wiem gdzie to umieścić. Na innym forum napisał mi korespondent: "If a href is making your page post back you can return false from the onclick event."

    <script type="text/javascript">
        $(document).ready(function(){       
            $('.like').click(function(){
                var postid = $(this).attr('id');
                $.ajax({
                    url:'index_post.php',
                    type: 'post',
                    async: false,
                    data:{
                        'liked': 1,
                        'postid': postid
                    }
                });
            });
        });
</script>  

CODE PHP

 <span><a href="" class="like" id="<?php echo $post['id']; ?>"></a></span>

Proszę o pomoc w zamian daję REPUTACJĘ DLA POMOCNYCH !

Practice Makes PerfectJulie James


 

16 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

Zobacz taka konstrukcje

<script type="text/javascript">
$(document).ready(function(){       
  $('.like').click(function(event){
    var postid = $(this).attr('id');
    $.ajax({
      url:'index_post.php',
      type: 'post',
      async: false,
      data:{
        'liked': 1,
        'postid': postid
      }
    });
    event.preventDefault();
  });
});
</script>

Albo tak jak napisal Ci ktos na innym forum

<a href="" class="like" id="<?php echo $post['id']; ?>" onClick="return false;"></a>

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano

 

Zobacz taka konstrukcje

<script type="text/javascript">
$(document).ready(function(){       
  $('.like').click(function(event){
    var postid = $(this).attr('id');
    $.ajax({
      url:'index_post.php',
      type: 'post',
      async: false,
      data:{
        'liked': 1,
        'postid': postid
      }
    });
    event.preventDefault();
  });
});
</script>

Niestety, nie działa :/

 

 

Zobacz taka konstrukcje

<script type="text/javascript">
$(document).ready(function(){       
  $('.like').click(function(event){
    var postid = $(this).attr('id');
    $.ajax({
      url:'index_post.php',
      type: 'post',
      async: false,
      data:{
        'liked': 1,
        'postid': postid
      }
    });
    event.preventDefault();
  });
});
</script>

Niestety, nie działa :/

 

EDIT: Korespondent: You need to change the span's html in the success function.

Practice Makes PerfectJulie James


 

Opublikowano

No to zobacz to co dopisalem do postu

<a href="" class="like" id="<?php echo $post['id']; ?>" onClick="return false;"></a>

Tak jeszce patrze na Twoj kod i mam pytanie. Skoro 'liked' zawsze ma wartosc 1 to po co ją przekazywac,

data:{
 'postid': postid
}

Skoro mozna ją zdefiniowac w index_post albo uzyc tam konstrukcji SQL zwiekszajacej o 1 zawartosc

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano

No to zobacz to co dopisalem do postu

<a href="" class="like" id="<?php echo $post['id']; ?>" onClick="return false;"></a>
Tak jeszce patrze na Twoj kod i mam pytanie. Skoro 'liked' zawsze ma wartosc 1 to po co ją przekazywac,
data:{
 'postid': postid
}
Skoro mozna ją zdefiniowac w index_post albo uzyc tam konstrukcji SQL zwiekszajacej o 1 zawartosc

 

 

@ slepiec68

Jest problem, bo jeśli dodaję onClick="return false;" to like się nie dodaję do bazy czyli to coś blokuje te dwie opcje, bo obie nie działają. A co do tego kodu poniżej to w sumie sam nie wiem działało więc tak zapisałem. A jak już mowa o tym, że można zdefiniować w index_post.php to gdzie mam to uczynić ?

data:{
 'postid': postid
} 

Skrypt index_post.php

<?php
    session_start();
    $mysqli = new mysqli('localhost', 'root','');
    $mysqli->select_db('mike');

     $postid = $_POST['postid'];
     $result = mysqli_query($mysqli, "SELECT * FROM news WHERE id=$postid");
     while($row2 = $result->fetch_array())
	 {
	    $n = $row2['likes'];
            mysqli_query($mysqli, "UPDATE news SET likes=$n+1 WHERE id=$postid");
	    mysqli_query($mysqli, "INSERT INTO likes (userid, postid) VALUES('".$_SESSION['id']."',$postid)");
	 }	
 

Practice Makes PerfectJulie James


 

Opublikowano

Jesli dobrze rozumiem to procedura LIKE jest wykonywana dla konkretnego postu, to po jakiego grzyba masz tam konstrukcje WHILE?

 

Przeciez

SELECT * FROM news WHERE id=$postid

zawsze zwroci 1 rekord :)

Zeby podniesc zawartosc jak w tym przypadku o 1 nie musisz jej znac - wystarczy zrzucic to na SQL

... `likes`=`likes`+1 ...

Po co ta cala petla, drazniace mnie (i pewnie nie tylko mnie) przepisywanie zmiennych/elementow tablicy do chwilowych zmiennych?

 

IMO wystarczy taki kod

<?php

session_start();
$mysqli = new mysqli('localhost', 'root', '');
$mysqli->select_db('mike');

mysqli_query($mysqli, "UPDATE `news` SET `likes`=`likes`+1 WHERE `id`={$_POST['postid']}");
mysqli_query($mysqli, "INSERT INTO `likes` (`userid`, `postid`) VALUES({$_SESSION['id']},{$_POST['postid']})");

?>

Zainstaluj sobie jakis dodatek dla tworcow stron np FireBug, odpal konsole i patrz co sie wykonuje i co zwraca zadanie ajax. To naprawde pomocne narzedzie.

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano

Jesli dobrze rozumiem to procedura LIKE jest wykonywana dla konkretnego postu, to po jakiego grzyba masz tam konstrukcje WHILE?

 

Przeciez

SELECT * FROM news WHERE id=$postid

zawsze zwroci 1 rekord :)

Zeby podniesc zawartosc jak w tym przypadku o 1 nie musisz jej znac - wystarczy zrzucic to na SQL

... `likes`=`likes`+1 ...

Po co ta cala petla, drazniace mnie (i pewnie nie tylko mnie) przepisywanie zmiennych/elementow tablicy do chwilowych zmiennych?

 

IMO wystarczy taki kod

<?php

session_start();
$mysqli = new mysqli('localhost', 'root', '');
$mysqli->select_db('mike');

mysqli_query($mysqli, "UPDATE `news` SET `likes`=`likes`+1 WHERE `id`={$_POST['postid']}");
mysqli_query($mysqli, "INSERT INTO `likes` (`userid`, `postid`) VALUES({$_SESSION['id']},{$_POST['postid']})");

?>

Zainstaluj sobie jakis dodatek dla tworcow stron np FireBug, odpal konsole i patrz co sie wykonuje i co zwraca zadanie ajax. To naprawde pomocne narzedzie.

Zmieniłem tak jak mówiłeś. Pobrałem też wtyczkę. I jest problem. Bo ogólnie to mam dwa przyciski, i nie działa ten drugi który powinien usunąć dane które wcześniej wysłał użytkownik, czyli userid i postid. FireBug w konsoli pokazuje działanie przycisku, lecz nie usuwa on wysłanych danych z bazy.

<?php
    session_start();
    $mysqli = new mysqli('localhost', 'root','');
    $mysqli->select_db('mike');

    mysqli_query($mysqli, "DELETE FROM `likes` WHERE `postid`={$_POST['postid']} AND `userid`={$_SESSION['id']}");
    mysqli_query($mysqli, "UPDATE `news` SET `likes`=`likes`-1 WHERE `id`={$_POST['postid']}");

?>

Practice Makes PerfectJulie James


 

Opublikowano

Nie dziala bo nie moze ... bo go tu brakuje (i zakladam ze go nie bylo)

 

Mozesz dorobic na szybko

 

Dodaj kolejne wywolanie onclick np

$('.dislike').click(function(event){
var postid = $(this).attr('id');
$.ajax({
url:'index_post_dis.php',
type: 'post',
async: false,
data:{
'liked': 1,
'postid': postid
}
});
});

a w index_post_dis.php wpisz to co podales

<?php
    session_start();
    $mysqli = new mysqli('localhost', 'root','');
    $mysqli->select_db('mike');

    mysqli_query($mysqli, "DELETE FROM `likes` WHERE `postid`={$_POST['postid']} AND `userid`={$_SESSION['id']}");
    mysqli_query($mysqli, "UPDATE `news` SET `likes`=`likes`-1 WHERE `id`={$_POST['postid']}");

?>

i teoretycznie powinno smigac

 

Albo rozbudowac - przekazac np  like : true lub false (1/0) a w index_post.php spradzac $_POST['like'] i wykonac odpowiednie zapytania do bazy, jak Ci latwiej :)

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano

Nie dziala bo nie moze ... bo go tu brakuje (i zakladam ze go nie bylo)

 

Właśnie teoretycznie powinno działać, a w praktyce to nie działa.

 

Ogólnie skrypt JS wygląda tak:

    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){       
            $('.like').live("click",function(){
                var postid = $(this).attr('id');
                $.ajax({
                    url:'index_post.php',
                    type: 'post',
                    async: false,
                    data:{
                        'postid': postid
                    }
                });
            });
        });
</script>    
        <script type="text/javascript">
            $(document).ready(function(){                         
                $('.unlike').live("click",function(){
                    var postid = $(this).attr('id');
                    $.ajax({
                           url:'index_unpost.php',
                           type: 'post',
                           async: false,
                           data:{
                                'postid2': postid
                        }
                    });
                });
           });

</script> 

A tak wygląda skrypt w sekcji body:

<div id="content">
	
			
<?php
try 
{

 $user = 'root';
 $pass = '';
 $obiektPDO = new PDO('mysql:host=localhost;dbname=mike', $user, $pass);
 $obiektPDO->exec("set names utf8"); // Polskie znaczki

 $zapytanie = "SELECT * FROM news";
 $wykonaneZapytanie = $obiektPDO->prepare($zapytanie);
 $wykonaneZapytanie->execute();

 $wyniki = $wykonaneZapytanie->fetchAll();

 foreach($wyniki as $post) 
 {?>
 <?php
	   
        $query = $mysqli->query("SELECT * FROM news");
    	 
        if(mysqli_fetch_array($query)) { ?>
        <div class="post">
            <?php echo "<h4>".$post['nazwa']."</h4>"."<img style='width:680px; max-height:680px; float: center; ' src='photosusers/".$post["image"]."'>"." "; ?>
            <?php     
                
                $result = mysqli_query($mysqli,"SELECT * FROM likes WHERE userid='".$_SESSION['id']."' AND postid=".$post['id']." ");
                
                if(mysqli_num_rows($result) == 1) { ?>
                    <span><a href="" class="unlike" id="<?php echo $post['id']; ?>"><img style='width:35px; height:35px; float: center; ' src='img/unlike.png' ></a></span>
          <?php } else { ?>
                         <span><a href="" class="like" id="<?php echo $post['id']; ?>"><img style='width:35px; height:35px; float: center; ' src='img/like.png' ></a></span>
           <?php } ?>
           <?php echo "<h3 style='border-top: 1px solid grey; border-bottom: 1px solid grey; color:#333333;'>Lubi to: ".$post['likes']." osób"."Dodał: ".$post['autor'];?>
        </div>
       <?php } ?>
  <?php
 
 }

 } 
 catch(PDOException $e) 
 {
 echo "Wystąpił błąd" .$e;
 }

?>
</div> 

Practice Makes PerfectJulie James


 

Opublikowano

Nie rozumiem tego tematu , proszę opisz czego potrzebujesz ze szczegółami a napewno pomogę.

PS. W chromie nie trzeba dodatkowych wtyczek do podpatrzenia danych wysyłanych w ajax itp F12 zakładka "network"

Pomogłem? Daj Like'a

:)

Opublikowano

Nie rozumiem tego tematu , proszę opisz czego potrzebujesz ze szczegółami a napewno pomogę.

PS. W chromie nie trzeba dodatkowych wtyczek do podpatrzenia danych wysyłanych w ajax itp F12 zakładka "network"

Chodzi o to, że chcę aby po naciśnięciu przycisku w tym przypadku jest to  a href  strona nie odświeżała się cała tylko dany element na stronie czyli u mnie $post czyli jak kliknę like to strona nie ładuję się od nowa tylko jest w tym samym miejscu. 

Practice Makes PerfectJulie James


 

Opublikowano

Widziałem, że ładujesz jquery.

<div id="content_100">
ładowanie contentu do przeładowania
<a onclick="javascript:like(ewentualne id typa typu $id)"><button>Like</button></a>
</div>

js/jquery

$(document).ready(function(){		
	function like(id_typa){
		$.post(like.php,{
		id_typa: id_typa
		}, function(data) { $( "#content_100" ).html(data); }); // ładowanie z echo php do wskazanego diva
			
});

w php

<?php
ładowanie pierdół
if(!is_numeric($_POST['id_typa'])){
dalsze przetwarzanie;
echo "nowy content który zostanie wyświetlony w div id content_100";
}
?>

Pisane na szybko wiec możliwe errory

Pomogłem? Daj Like'a

:)

Opublikowano

Widziałem, że ładujesz jquery.

<div id="content_100">
ładowanie contentu do przeładowania
<a onclick="javascript:like(ewentualne id typa typu $id)"><button>Like</button></a>
</div>

js/jquery

$(document).ready(function(){		
	function like(id_typa){
		$.post(like.php,{
		id_typa: id_typa
		}, function(data) { $( "#content_100" ).html(data); }); // ładowanie z echo php do wskazanego diva
			
});

w php

<?php
ładowanie pierdół
if(!is_numeric($_POST['id_typa'])){
dalsze przetwarzanie;
echo "nowy content który zostanie wyświetlony w div id content_100";
}
?>

Pisane na szybko wiec możliwe errory

Zaraz sprawdzę to rozwiązanie jak nie będzie działać to dam EDIT'a 

Practice Makes PerfectJulie James


 

Specjalista
Opublikowano

to pomoże:
 

 <script type="text/javascript">
        $(document).ready(function(){       
            $('.like').click(function(){
                var postid = $(this).attr('id');
                $.ajax({
                    url:'index_post.php',
                    type: 'post',
                    async: false,
                    data:{
                        'liked': 1,
                        'postid': postid
                    }
                });
return false;
            });
        });
</script>  
Opublikowano

 

to pomoże:

 

 <script type="text/javascript">
        $(document).ready(function(){       
            $('.like').click(function(){
                var postid = $(this).attr('id');
                $.ajax({
                    url:'index_post.php',
                    type: 'post',
                    async: false,
                    data:{
                        'liked': 1,
                        'postid': postid
                    }
                });
return false;
            });
        });
</script>  

Edit; Jak klikam na przycisk to nie odświeża się wartość, dopiero jak sam odświeżę stronę to się wszystko aktualizuje  

Practice Makes PerfectJulie James


 

Opublikowano

Z tego co piszesz rozwaizanie dziala, a to ze sie nie pokazuje nowej wartosci like to masz na wlasna prosbe :)

 

Klikniecie w przycisk ma zablokowane przeladowanei strony, skrypt ajax dziala ale skad na srtonie z zablokowanym przeladowaneim ma sie pojawic nowa zawartosc - skrypt ajax TYLKO aktualizuje baze

 

Musisz sam zadbac o zaktualizowanie tej wartosci

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano

Z tego co piszesz rozwaizanie dziala, a to ze sie nie pokazuje nowej wartosci like to masz na wlasna prosbe :)

 

Klikniecie w przycisk ma zablokowane przeladowanei strony, skrypt ajax dziala ale skad na srtonie z zablokowanym przeladowaneim ma sie pojawic nowa zawartosc - skrypt ajax TYLKO aktualizuje baze

 

Musisz sam zadbac o zaktualizowanie tej wartosci

Dobra działa po części, bo po kliknięciu tworzy się duplikat strony( content'u)

Practice Makes PerfectJulie James


 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...