Prihvaćanje TU, TD bez refresha

poruka: 11
|
čitano: 2.429
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
12 godina
offline
Prihvaćanje TU, TD bez refresha

Na svom forumu imam palac gore i palac dolje. Da bi nekom stavio palac gore klikneš ga i onda se stranica refresha, uspio sam namjestiti da se bar nađe na istom postu ali puno bi bolje bilo da se ne mora osvježit stranica.

 

Evo koda koji riješava za palac dolje, sve je isto i u palac gore samo su riječi suprotne tdn,tup :) http://pastebin.com/vRw8vFNT.

Napravio sam da automatski kad se stavi thumbdown da se skine thumbup i obratno.

 

 

very enraged dude.
 
0 0 hvala 0
17 godina
moderator
offline
Re: Prihvaćanje TU, TD bez refresha

Kaj je to? PHP? Ak nećeš da ti se refresha, onda moraš koristiti tehniku AJAX, dakle JavaScriptom na stranici označiš da je napravljen TU ili TD i pozvati PHP skriptu koja bude to zabilježila u bazu podataka.

12 godina
offline
Re: Prihvaćanje TU, TD bez refresha
mbaksa kaže...

Kaj je to? PHP? Ak nećeš da ti se refresha, onda moraš koristiti tehniku AJAX, dakle JavaScriptom na stranici označiš da je napravljen TU ili TD i pozvati PHP skriptu koja bude to zabilježila u bazu podataka.

Da, PHP je.

I ja sam mislio Javascriptom riješit da on izmijene sliku, promjeni brojku i doda te na listu prividno, to bi vjerojatno mogao sam izvest ali nije mi bilo jasno kako da ono zabilježi u bazu bez ponovnog učitavanja stranice. Znam za AJAX i znam da je to ono što mi treba ali to ne mijenja činjenicu da ne znam kako radi to funkcionira. Ako ima dobra duša da to pobliže pojasni {#}.

very enraged dude.
17 godina
moderator
offline
Re: Prihvaćanje TU, TD bez refresha

Najjednostavnije ti je uz pomoć jQueryja - prouči: http://docs.jquery.com/Ajax/jQuery.post

12 godina
offline
Re: Prihvaćanje TU, TD bez refresha
mbaksa kaže...

Najjednostavnije ti je uz pomoć jQueryja - prouči: http://docs.jquery.com/Ajax/jQuery.post

Mogu li ovako to riješit?

http://chriscook.me/web-development/phpajax-execute-php-function-by-clicking-a-link/

 

I ako tako namjestim oću moći ovako namjestiti za Javascript

 

ubaciti u PHP kod ako je pritisnut (prikaziva tdnremove) $pritisnut = 1; a ako nije pritisnut (prikaziva tdnadd) $pritisnut = 0;

 

 

var pritisnut = "<?= $pritisnut ?>";

var pritisnut = "<?= $pritisnut ?>";

var kolkoimatdova = "<?= $post['tdncount'] ?>";

if (pritisnut==1) {

Šta već ide da zamijeni pritisnutu sliku sa nepritisnutom i oduzme brojku za counter, makne me sa liste

}

if (pritisnut==0) {

Šta već ide da zamijeni nepritisnutu sliku sa pritisnutom i doda brojku na counter, ubaci me na listu

}

Sad tu opet nastaje problem, vjerojatno bi sve radilo kad bi prvi put pritisnu dugme ali šta ako ga pritisnem opet? Hoće li se PHP kod osvježiti na stranici, hoće li Javascript dobiti novu brojku za brojač tj hoće li raditi ako želim opet nešto stisnuti.

 

 

very enraged dude.
14 godina
offline
Prihvaćanje TU, TD bez refresha

Ovako sam to ja riješio u WordPress-u, dakle PHP + jQurey AJAX

 

Napraviš novi .php file u kojem radiš submit bazi. Dakle pomoću jQuery-a pošalješ request + varijablu - id posta koji je lajkan. Zaim u php file-u proičiatš koji user je lajkao (za to moraš nekako povezati taj file sa aplikacijom koju koristiš, u WP-u se to radi includeanjem wp-blog-header.php). Zatim porčitaš iz baze da li je taj korisnik već lajkao post. Ako je- to znači da želim maknuti lajk pa onda u bazi ukloniš informaciju da je user lajkao, te također returnaš npr 0. Onda sa jQuery-om napraviš callback funkciju (to ti je vrlo lagano, samo sljedi sintaksu POST request-a) i pročitaš return. Ako je user lajkao, increas-aš broj lajkova za jedan, ako je već bio lajkao, onda decreasaš za jedan i ukloniš klasu liked.

 

 

To ti je onako našturo.

 

 

EDIT: Također, vrlo bitno, odvikni se od pisanja <? ?> već piši puni <?php ?> jer neki serveri nemaju to enable-ano. Sad je ok dok radiš za sebe, ali bolje se naviknuti na vrijeme.

WordPress ❤
Poruka je uređivana zadnji put uto 11.12.2012 22:21 (OriginalEXE).
 
0 0 hvala 1
14 godina
protjeran
offline
Prihvaćanje TU, TD bez refresha

<script>

 

$("#someid).click( function () {

 

//neki podaci kao postid, userid bla bla.. npr

var form_data ={userid: $("#nekid").val()

}

 

$.ajax({
        url: "url do php funkcije",
        type: 'POST',
        dataType: 'json',
        success: function(data) {

          if(data){
           //napravi nešto sa palcem
         }
        else{
        //pljuni neki error
        }
     }
  });

});

</script>

 

Evo ovo su osnove jquery ajax-a. Isto gore vrijedi i za GET, odnosno za dohvaćanje broja tu i td.

Ad astra peronospora
Poruka je uređivana zadnji put uto 11.12.2012 22:28 (Bypass).
 
0 0 hvala 1
12 godina
offline
Re: Prihvaćanje TU, TD bez refresha
Bypass kaže...

<script>

 

$("#someid).click( function () {

 

//neki podaci kao postid, userid bla bla.. npr

var form_data ={userid: $("#nekid").val()

}

 

$.ajax({
        url: "url do php funkcije",
        type: 'POST',
        dataType: 'json',
        success: function(data) {

          if(data){
           //napravi nešto sa palcem
         }
        else{
        //pljuni neki error
        }
     }
  });

});

</script>

Super!

ovo nisam skontao samo

var form_data{userid: $("#nekid").val()

}

jel to ubiti isto kao i ovo
var userid = "<?php echo $#nekid; ?>";
very enraged dude.
Poruka je uređivana zadnji put uto 11.12.2012 22:43 (ruzcheHR).
14 godina
protjeran
offline
Prihvaćanje TU, TD bez refresha

To je samo primjer.

 

form data su vrijednosti elemenata u nekoj formi. Dakle input, select, checkbox, textarea itd.

 

$('#nekiid').val(); uzima vrijednost elementa sa id-om #nekiid.

 

Ti naravno ne moraš koristiti formu, a userid se može preuzeti iz session-a, u backendu, kao i postid itd.

 

Ali na kraju krajeva ne trebaš ti koristiti jquery ajax, možeš koristiti čisti ajax. Ali ista stvar jer jquery ajax samo olakšava posao.

 

Dakle da bi ti radilo trebaš 2 POST ajax requesta i 2 GET, jedan od to dvoje za TU i jedan od to dvoje za TD.

 

 

Ad astra peronospora
 
1 0 hvala 1
12 godina
offline
Prihvaćanje TU, TD bez refresha

Uradio sam ovako i ne radi (samo za Thumdown add)

dakle ovo if(!$b) je ako thumbdown već nije daden, to funkcionira - ako ovaj dio gdje je url: prebacim dole u a href thumdown radi savršeno...javascript također radi jer sam probao

ubaciti location.href = 'showthread.php?action=thumbdown&tid={$post['tid']}&pid={$post['pid']}#pid{$post['pid']}'; ... radi i tako al nikako ne mogu da se ne refresha stranica {#}.

 

if(!$b)

{

$post['thumbdowns'] = "<script>

function tdnadd{$post['pid']}() {

$.ajax({

     url: 'showthread.php?action=thumbdown&tid={$post['tid']}&pid={$post['pid']}#pid{$post['pid']}',

     type: 'POST',

     dataType: 'json',

     success: function(data) {

      if(data){

      //ode će ić poplava i ostala razna sranja koja se dešavaju palčiću kad ga kliknemo jeee

     }

     else{

     //pljuni neki error 

     }

   }

  });

});

}

</script>

<a class=\"tdnadd\" id=\"a{$post['pid']}\" href=\"javascript:tdnadd{$post['pid']}()\"></a>";

}

 

very enraged dude.
Poruka je uređivana zadnji put sri 12.12.2012 22:20 (ruzcheHR).
 
0 0 hvala 0
14 godina
protjeran
offline
Prihvaćanje TU, TD bez refresha

Pa imaš li neku base_url funkciju? location.href nikako koristiti.

 

Druga stvar nikada, ali nikada ne echo-irati <script></script> tagove i sve što se u njima nalazi. To je vrlo loša sigurnosna praksa i može dovesti do izvršavanja arbitrarnog koda.

 

Treće, ne stavljaj php logiku u javascript. On ti mora samo služiti za prijenos podataka između frontenda i backenda.

 

Evo ti jedan mali dio koda koji ja koristim:

<script type="text/javascript">

    $('.remove').click(function(r){
       var mid = $(this).attr("id");
       jConfirm('Are you sure you want to delete this message permanently?', 'Delete message', function(r) {
          if(r){
             $.ajax({
                url: "<?php echo base_url();?>messages/delete/" + mid,
                type: 'POST',
                dataType: 'json',
                success: function(data) {
                   if (data.notify){
                        $.pnotify({
                         title: 'Success!',
                         text: data.message,
                         type: 'success',
                         history: false,
                         animation: 'show'
                         });                     
                     }
                   else{
                      $.pnotify({
                         title: 'Error!',
                         text: data.message,
                         type: 'error',
                         history: false,
                         animation: 'show'
                      });                     
                   }
                }
             });   
       }
          else{ return false;}
       });
    });

</script>

 

Vraćanje json-a u php-u:

     $array = array('notify' => TRUE, 'message' => $result);
     echo json_encode($array);

Ad astra peronospora
 
1 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice