Avatar billede simotho Nybegynder
18. juni 2009 - 09:53 Der er 22 kommentarer

Javascript slet metode virker ikke

Hej Eksperter
Er igang med, at lave en løsning hvor brugeren kan slette sine ting via. js og php.
Dog er jeg stødt ind i det problem, som er:
Når jeg skal trykke Delete vil den ikke reagerer med mit AJAX/Javascript

Her er min JS kode:

    <script language="javascript">
        function fnDeleteRecord(id)
        {
            new Ajax.Request('delete.php?action=Delete&id='+id,{method:'get'});
        }
    </script>

Og her er det man trykker på for at slette:

echo "<td><a href='java script:void(0);' onclick=fnDeleteRecord('".$row['id']."'); >Delete</a></td>";
Avatar billede Slettet bruger
18. juni 2009 - 10:28 #1
Objektet Ajax findes da ikke i javascript som standart, gør det vel? Hvis ikke, hvilket script bruger du så til at definere det?
Avatar billede simotho Nybegynder
18. juni 2009 - 10:51 #2
Bruger ikke nogen andre filer?
Skal man det, er ny i sproget :)
Avatar billede majbom Novice
18. juni 2009 - 12:59 #3
prøv med noget ala:

<script language="javascript">
  function fnDeleteRecord(id){
      if(response("Er du sikker på at denne skal slettes?")){
        window.location.href='delete.php?action=Delete&id='+id
  }
</script>

echo '<td><a href="#" onclick="fnDeleteRecord(\'".$row['id']."\')">Delete</a></td>';
Avatar billede Slettet bruger
18. juni 2009 - 14:03 #4
Eller noget à la dette:

<script language="javascript">
  function fnDeleteRecord(id){
      if(response("Er du sikker på at denne skal slettes?"))
        {
        if (window.XMLHttpRequest)
            {
            xmlhttp=new XMLHttpRequest();
            }
        else (window.ActiveXObject)
            {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        if(xmlhttp)
            {
            xmlhttp.onreadystatechange=function()
                {
                if(xmlhttp.readyState==4)
                  {
                  if(xmlhttp.responseText == "Lykkedes")
                    {
                    //Slet td/tr'en der lige er blevet slettet
                    }
                  }
                }
            xmlhttp.open("GET",'delete.php?action=Delete&id='+id,true);
            xmlhttp.send(null);
            }
        else
            {
            window.location.href='delete.php?action=Delete&id='+id;
            }
</script>

echo "<td><a href='java script:void(0);' onclick=fnDeleteRecord('".$row['id']."'); >Delete</a></td>";
Avatar billede simotho Nybegynder
18. juni 2009 - 14:18 #5
De virker ikke :s
Avatar billede majbom Novice
18. juni 2009 - 14:35 #6
-> #5 - hvilken af dem?

-> #4 - ja hvis det skal køres uden en opdatering af siden, men så vil du stadig have muligheden for at slette den, selvom den er blevet slettet, medmindre der også bliver sørget for at fjerne den fra siden...
Avatar billede simotho Nybegynder
18. juni 2009 - 14:38 #7
Begge to.
Men det er som #4 skriver den.
Det skal være så den ikke opdaterer siden, men indlægget skal så også slettes fra siden og ikke blive der til man opdaterer siden igen :)
Avatar billede majbom Novice
18. juni 2009 - 14:45 #8
så er det nok nødvendigt at du kommer med noget kode, så vi kan se hvordan det der skal slettes ser ud, ellers er det lidt svært at hjælpe...
Avatar billede ReneNP Nybegynder
18. juni 2009 - 14:57 #9
Jeg kan se at dit javascript eksempel baserer sig på Prototype.js frameworket.

Din kode ser god nok ud, men for at få den til at virke, skal du inkludere prototype.js filen (du kan downloade den her: http://prototypejs.org ).
Avatar billede ReneNP Nybegynder
18. juni 2009 - 15:03 #10
... Hvis indlægget også skal slettes fra siden, skal du have fat i DOM elementet, som du så fjerner

Eks.:
<script language="javascript">
function fnDeleteRecord(id)
{
      new Ajax.Request('delete.php?action=Delete&id='+id,{method:'get', onSuccess: function(){
        $('entry_' + id).remove();
      }});
}
</script>
<div id="entry_17">....bla bla bla....</div>
<a href='java script:void(0);' onclick=fnDeleteRecord('17'); >Delete</a>

Ovenstående kode er baseret på prototype.js
Avatar billede Slettet bruger
18. juni 2009 - 15:05 #11
#6
Det har jeg netop taget hånd med følgende:
if(xmlhttp.responseText == "Lykkedes")
{
//Slet td/tr'en der lige er blevet slettet
}


Der skal du indsætte javascript kode som sletter rækken på siden. Det smarteste vil nok være at give rækkerne samme id deres SQL-id, og så fjerne dem med et:
getElementById(<?php echo "$row['id']"; ?>).innerHTML = ""
eller lignende. Måske splazz kan komme med noget bedre kode?
Avatar billede Slettet bruger
18. juni 2009 - 15:08 #12
Hov, der kom en god sjat indlæg før jeg oprettede mit.
Begyndte at skrive #11 lige efter #7.
Avatar billede majbom Novice
18. juni 2009 - 15:35 #13
-> #kimsey0 - ja den havde jeg så overset.

men det kunne tyde på at #0 bare skulle se nærmere på prototype.js :)
Avatar billede simotho Nybegynder
18. juni 2009 - 16:30 #14
Kan i ikke komme med eksempler på hvad i mener, er helt ny i js og skal bruge denne funktion til mit projekt. Så det ville være dejligt hvis i ville komme med nogle eksempler ;)

Den sletter ikke med jeres eksempler ;s
Avatar billede majbom Novice
18. juni 2009 - 17:56 #15
koden i #4 skulle nok gøre det - hvis ikke må du få en javascript-fejl, post den her...

har du en php-fil der hedder delete.php?
Avatar billede simotho Nybegynder
18. juni 2009 - 19:46 #16
4'eren sletter i min database? :S

Hele koden:


<?php
    require("config.php");
    $sql = "SELECT * from test";
    $result=mysql_query($sql);
?>
<html>
<head>       
<script language="javascript">
  function fnDeleteRecord(id){
      if(response("Er du sikker på at denne skal slettes?"))
        {
        if (window.XMLHttpRequest)
            {
            xmlhttp=new XMLHttpRequest();
            }
        else (window.ActiveXObject)
            {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        if(xmlhttp)
            {
            xmlhttp.onreadystatechange=function()
                {
                if(xmlhttp.readyState==4)
                  {
                  if(xmlhttp.responseText == "Lykkedes")
                    {
                    //Slet td/tr'en der lige er blevet slettet
                    }
                  }
                }
            xmlhttp.open("GET",'delete.php?action=Delete&id='+id,true);
            xmlhttp.send(null);
            }
        else
            {
            window.location.href='delete.php?action=Delete&id='+id;
            }
</script>
</head>
<body>
<table id="userrecords" border="1" cellpadding="0" cellspacing="0" width="700">
    <tr>
        <th> User Name </th>

        <th> Password </th>

        <th> Address </th>

        <th> Phone Number </th>

        <th> Action </th>
        <th> Status </th>
    </tr>
<?php

while($row = mysql_fetch_array($result))
{
    echo "<tr id='".$row[id]."'>";

    echo "<td>".$row['overskrift']."</td>";

    echo "<td>".$row['underskrift']."</td>";

    echo "<td>".$row['tekst']."</td>";

    echo "<td>".$row['username']."</td>";

    echo "<td><a href=\"#\" onclick=\"fnDeleteRecord('".$row['id']."');return false;\" >Delete</a></td>";
 

    if($row['status'] == 'enabled')
        echo "<td><img src='images/spinner.gif' id='a[$row[id]]' alt=icon border=0 style='display:none;' /><img src='images/enable.png' alt=icon border=0 onClick=fnUpdateStatus('".$row['id']."','disabled')  /></td>";
    else if ($row['status'] == 'disabled')
        echo "<td><img src='images/spinner.gif' id='a[$row[id]]' alt=icon border=0 style='display:none;' /><img src='images/disable.png' alt=icon border=0 onClick=fnUpdateStatus('".$row['id']."','enabled') /></td>";

    echo "</tr>";
}
    echo "</table>";
?>
</body>
</html>
Avatar billede majbom Novice
18. juni 2009 - 19:54 #17
prøv at ændre:

if(xmlhttp.readyState==4)
{
  if(xmlhttp.responseText == "Lykkedes")
  {
      //Slet td/tr'en der lige er blevet slettet
  }
}

til:

if(xmlhttp.readyState==4)
{
  if(xmlhttp.responseText == "Lykkedes")
  {
      //Slet td/tr'en der lige er blevet slettet
  }
  alert("RESPONSE: "+xmlhttp.responseText);
}

hvordan ser din delete.php ud?
Avatar billede simotho Nybegynder
18. juni 2009 - 20:40 #18
<?php
require_once('config.php');
if ($_GET['action'])
{
    switch($_GET['action'])
    {
        case 'Delete':
                $sql = "Delete from test where id ='".$_GET['id']."'";
                $result = mysql_query($sql);
                if(!$result)
                        echo "some problem occured during delete operation";
                break;
    }
}
?>
Avatar billede majbom Novice
18. juni 2009 - 21:03 #19
så hvis den fejler får du "some problem occured..." tilbage og hvis det lykkedes får du intet tilbage.

det du så skal er at slette den linje, hvis responseText er tom.

det burde kunne gøres således:

var objTr = document.getElementById(id);
objTr.parentNode.removeChild(objTr);

ovenstående indsættes hvor du modtager svar fra php-filen:

if(xmlhttp.readyState==4)
{
  if(xmlhttp.responseText == "")
  {
      //Slet td/tr'en der lige er blevet slettet
      var objTr = document.getElementById(id);
      objTr.parentNode.removeChild(objTr);
  }
}
Avatar billede Slettet bruger
18. juni 2009 - 22:13 #20
Hov, lavede også en bummert i koden:

else (window.ActiveXObject)

skal ændres til

else

Fejlen skyldes at jeg plejer at bruge en kode som denne:

        if (window.XMLHttpRequest)
            {
            xmlhttp=new XMLHttpRequest();
            }
        else if (window.ActiveXObject)
            {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
        else
            {
            alert("Din browser understytter ikke XMLHttp.");
            }


#19 - Fornemt. Lige til at bruge :-)
Avatar billede simotho Nybegynder
18. juni 2009 - 22:17 #21
Den virker stadig ikke :S
Avatar billede majbom Novice
19. juni 2009 - 08:11 #22
-> #21 - i stedet for bare at skrive: "den virker ikke" - så skriv hvad der sker og hvad der ikke sker!

kommer der en fejl eller hvad sker der?
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