Avatar billede Slettet bruger
21. januar 2011 - 09:16 Der er 4 kommentarer og
2 løsninger

Javascript i ajax-side

Hej, lidt tricky spørgsmål - så jeg smider 200 point :-) Bliver nok også lidt tricky at forklare, men here goes...

Ok, på min side, brugere.php, har jeg har en række bruger-kategorier. Hver kategori indeholder en række brugere. Jeg vælger brugerkategorien i en select som kalder listen af brugere via et ajax-kald, så listen opdateres uden at siden genloades, hvis jeg vælger en anden kategori i select'en. Listen ligger i et div, som en helt anden php-side genererer; vis_brugere.php.

Til dette bruger jeg:
1) Min select: onclick="showUser(this.value)"

2) showUser-kode:
---
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","lookup_processing.php?user_id="+str,true);
xmlhttp.send();
}
---

3) Vises i: <div id="txtHint"></div>

- det er taget herfra (eneste forskel er at jeg bruger onclick):
http://www.w3schools.com/PHP/php_ajax_database.asp


Godt - så langt så godt - den viser altså min liste over brugere i min kategori. Nu ønsker jeg igen at bruge ajax til at slette brugeren.

Her bruger jeg jquery.js. Det er taget herfra:
http://www.9lessons.info/2009/07/delete-records-with-random-animation.html

1) Mit link ser således ud:
<a href='#' del_user_id='".$row1["user_id"]."' del_role_id='".$role_id."' class='delbutton'>

2) Kode:
---
  <script type="text/javascript">
$(function() {
$(".delbutton").click(function(){
var element = $(this);

var del_user_id = element.attr("del_user_id");
var del_role_id = element.attr("del_role_id");

var info = 'id=' + del_user_id +'&role_id=' + del_role_id + '&course_contextid=<?php echo $course_contextid; ?>';

if(confirm("Vil du fjerne brugeren fra kurset?"))
          {
$.ajax({
  type: "GET",
  url: "delete.php",
  data: info,
  success: function(){
  }
 
});
        $(this).parents(".record").animate({ opacity: "hide" }, "slow");

}
return false;
});
});
</script>
---


Ok - og nu er vi nået til spørgsmålet :-)

Hvis jeg klikker på mit slet-link på brugere.php, sker der intet. Ser jeg til gengæld på vis_brugere.php - der godt kan ses alene via vis_brugere.php?user_id=[ID] - så virker det fint. Det virker med andre ord ikke, når vis_brugere.php er en integreret del af brugere.php.

Er der mon en, der lige kan gennemskue, hvordan de to ajax-ting kan lege sammen her? :-)
Avatar billede tjens Nybegynder
22. januar 2011 - 19:44 #1
Mulige fejl:

- Det er ikke vis_brugere.php, der henter brugerlisten i det første ajax-kald.
  Måske laver du ikke samme type link i lookup_processing.php.

- Måske mangler der include af .js filer vedr. jquery,
  i forhold til den side der virker?

- Du får ikke kaldt $(".delbutton").click(function(){ ... efter hver reload af brugere.
  Dermed er der ingen click funktion på linkene.


Jeg tror selv mest på den sidste.
Og det kan du løse ved at definere funktionen på normal vis, og sætte onclick på hvert link allerede når linket dannes af php.
Avatar billede intenz Novice
23. januar 2011 - 23:20 #2
Enig med #1.

Du bruger innerHTML til at overskrive din brugerliste med:
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

Derfor overskriver du dine onclick events, som kun bliver sat når siden indlæses (onload).

Du bør lægge din onclick event i en funktion for sig selv, så den kan kaldes når brugerlisten bliver indlæst (og onload hvis du har brug for det).

I stil med:

$(function() {
    addDelEvents();
});

function addDelEvents() {
    $(".delbutton").click(function(){
        var element = $(this);
       
        var del_user_id = element.attr("del_user_id");
        var del_role_id = element.attr("del_role_id");
       
        var info = 'id=' + del_user_id +'&role_id=' + del_role_id + '&course_contextid=<?php echo $course_contextid; ?>';
       
        if(confirm("Vil du fjerne brugeren fra kurset?"))
                  {
        $.ajax({
          type: "GET",
          url: "delete.php",
          data: info,
          success: function(){
          }
         
        });
       
        $(this).parents(".record").animate({ opacity: "hide" }, "slow");
       
        }
        return false;
    });
}


Og så kan kalde dine events igen, efter brugerlisten er indlæst.

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

    addDelEvents();
    }
  }
Avatar billede Slettet bruger
25. januar 2011 - 11:14 #3
Jeg takker - det virker fint. Måske I kan leve med en fordeling 50/150 mht. point?
Avatar billede intenz Novice
25. januar 2011 - 16:34 #4
Et svar.
Avatar billede tjens Nybegynder
25. januar 2011 - 21:32 #5
To svar.
Avatar billede tjens Nybegynder
25. januar 2011 - 21:33 #6
Anden gang er lykkens gang?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester