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

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


 

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

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


 

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

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

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


 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...