Problema executie functia Load la a doua accesare

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
alexinio3d
Mesaje:96

Problema executie functia Load la a doua accesare

Salutare.
Ce nu am facut bine la urmatorul cod??

Cod: Selectaţi tot

$("#dutilizator<?=$utilizator['utilizator_id']?>").click(function(){
  $.ajax({
    type: "POST",
    url: "<?=LINK?>admin/core/utilizator.php",
    data: { q : "dezactiv", id : utilizator_id },
    success: function(){ $("tr#id<?=$utilizator['utilizator_id']?>").removeClass("success").addClass( "danger" );
    $("#load<?=$utilizator['utilizator_id']?>").load(" #load<?=$utilizator['utilizator_id']?>");
    $("#loadstare<?=$utilizator['utilizator_id']?>").load(" #loadstare<?=$utilizator['utilizator_id']?>"); }
  });
});
Acest cod imi trimite niste date prin jquery la un fisier php care imi actualizeaza baza de date fara refrash sau alte cele, dar problema ca daca apas pe butonul care imi face asa ceva a doua oara nu mai merge acel buton doar daca dau refrash la pagina .
Siteuri create / configurate de mine :
SilvoProject.Ro ( Magazin Online ) : SilvoProject.Ro
TreiSute.Ro ( Comunitate de gaming ) : TreiSute.Ro

MarPlo Mesaje:4343
Salut
Incearca sa folosesti Mozilla Firefox cu addon-ul FireBug sa vezi daca apare vreo eroare javascript in consola, sau daca arata ceva dupa clic pe acel buton.
Daca mai e necesar, poti adauga aici codul html /javascript asa cum apare in sursa paginii in browser.

- Acel cod PHP din jquery se proceseaza o singura data, pe partea de server, cand e generata pagina, la urmatoarele apasari de buton, acele date generate de php in codul javascript raman ca la inceput, cand s-a incarcat pagina, caci php nu se executa in browser dupa incarcarea paginii.

alexinio3d Mesaje:96
Deci acele coduri php din jquery is id-urile utilizatorilor care leam luat din baza de date si leam pus la atributul id pentru a putea sa diferentiez butonul dupa care sa dea actualizare date, iar cand se actualizeaza in baza de date nu se actualizeaza si id utilizatorului, deci nu are de ce sa schimbe numele atribului id. ( asa ma gandesc eu )

Am instalat add-onsul FireBug si numi da nici o eroare, iar codul html & javascript dinainte si dupa apasare sunt urmatoarele ( pun prima data cea dinainte sa se dea click pe buton si apoi dupa ce sa apasat pe buton ) :

1. Inainte sa se dea click pe buton: treisute.ro/htmlbutonprimary.txt
2. Dupa ce dau click pe buton: treisute.ro/htmlbutonnew.txt
Siteuri create / configurate de mine :
SilvoProject.Ro ( Magazin Online ) : SilvoProject.Ro
TreiSute.Ro ( Comunitate de gaming ) : TreiSute.Ro

MarPlo Mesaje:4343
Am incercat sa testez putin, in consola apare ca se executa functia ajax si la a doua apasare pe buton (caci se vede ca acceseaza locatia pe server).
Probabil ca datele adaugate in pagina, in codul html, dupa raspunsul de la server, sau efectele cu Bootstrap, afecteaza structura DOM si inregistrarea evenimentului "click" la buton, caci se schimba structura HTML DOM.
Oricum, e doar o parere, nu stiu sigur daca asta e cauza, si nici solutia fiidca e prea mult cod.
- Ca idee, incearca fara Bootstrap, sa vezi daca functioneaza fara acele efecte.

alexinio3d Mesaje:96
La fel ... Tot numi merge nici daca dezactivez bootstrap-ul, nustiu ce sai mai fac .
Siteuri create / configurate de mine :
SilvoProject.Ro ( Magazin Online ) : SilvoProject.Ro
TreiSute.Ro ( Comunitate de gaming ) : TreiSute.Ro

MarPlo Mesaje:4343
Poate functia load() nu e corecta, desi daca la prima accesare functioneaza ..., nu stiu ce sa zic. Dar in documentatia jQuery am vazut ca la load() se adauga adresa paginii accesate.

Cod: Selectaţi tot

$( "#result" ).load( "adresa_pagina" );

// Sau:
$( "#result" ).load( "adresa_pagina", function() {
  alert( "Load was performed." );
});

Sau:
$( "#result" ).load( "adresa_pagina #container" );
- In metoda a treia, cu #container, elementul html cu id="container" trebuie sa fie in pagina incarcata. Poate si asta e o cauza, la pagina accesata, asta daca functia load() se executa; o poti testa cu varianta a doua, cu alert().
Vezi Tutorial: jQuery Ajax - metoda load()

Daca problema e la metoda "click", ca nu se executa la apasare pe buton, o solutie mai directa ar fi sa adaugi intr-o functie codul care este executat la clic pe acel buton, iar in tag-ul butonului aplici "onclick".

Cod: Selectaţi tot

<input type="button" id="dutilizator<?=$utilizator['utilizator_id']?>" onclick="dezact(<?=$utilizator['utilizator_id']?>)" value="Dezactivare" />
<script>
function dezact(id_usr){
  $.ajax({
    type: "POST",
    url: "<?=LINK?>admin/core/utilizator.php",
    data: { q : "dezactiv", id : utilizator_id },
    success: function(){ $("tr#id"+ id_usr).removeClass("success").addClass( "danger" );
    $("#load"+ id_usr).load("ADRESA_PAGINA #load"+ id_usr);
    $("#loadstare"+ id_usr).load("ADRESA_PAGINA #loadstare"+ id_usr); }
  });
});
</script>
- Alta idee nu mai am. Incearca sa faci teste cu alert() in diferite parti din cod, sa vezi daca se acceseaza acea funtie, ce date se primesc, etc., si asa iti poti da seama unde e problema si tot acolo cum sa o rezolvi.

Subiecte similare