eleman DOM kaldırılır olmamak

2 Cevap php

Ben php üzerinden bir tabloda görüntülenir mysql bir kaydı silmek için kod var, ve sonradan sayfasından tablo satırı silin. Kayıt, ancak hiçbir sayfa veya DOM değiştirir, silinir, ve anında değiştirmek gerekir.

İşte DOM silmek için javascript kodu

function deleteItem(layer, url) {
    var xmlHttp=GetXmlHttpObject();
    if(xmlHttp==null) {
        alert("Your browser is not supported?");
    }
    xmlHttp.onreadystatechange = function() {
        if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
                if(xmlHttp.responseText == 'result=true') {
                        var row = document.getElementById(layer);
                        row.parentNode.removeChild(row);
                }

        } else if (xmlHttp.readyState==1 || xmlHttp.readyState=="loading") {
                document.getElementById(layer).innerHTML="loading";
        }
    }
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
}
function deleteRec(layer, pk) {
    url = "get_records.php?cmd=deleterec&pk="+pk+"&sid="+Math.random();
    if (confirm("Confirm Delete?")) {
        deleteItem(layer, url);
    }
}

Böylece gibi php denir ki:

echo '<tr id=\"article_' . $pk . '\">' . "\n";   
echo '<td><a href="#" onclick="deleteRec(\'article_' . $pk .'\', \'' . $pk . '\')">DELETE</a></td>' . "\n";

$ Pk kaydın birincil anahtardır.

Oluşan html (tabii ki kayıt silinir beri) ince

<a href="#" onclick="deleteRec('article_260343387801', '260343387801')">DELETE</a>

Ancak sayfa herhangi bir şekilde güncellenmiş değil.

Neden?

2 Cevap

Ben sadece bir test sayfası kodunuzu attı ve ben kaldırmak zaman benim için çalışıyor:

 document.getElementById(layer).innerHTML=xmlHttp.responseText;

Sadece satırdan önce bu satır:

} else if (xmlHttp.readyState==1 || xmlHttp.readyState=="loading") {

document.getElementById(layer).innerHTML=xmlHttp.responseText; neden olan bir hata.

Edit: I'll just add that my 'version' of get_records.php is simply a php page the echos 'result=true' for my own testing purposes, so if you're still running into issues then I would suggest that your PHP script, while deleting the correct data, isn't returning the correct string - you should check what actually gets output to xmlHttp.responseText

Edit 2: Your PHP code never actually returns 'result=true' in a manner which your responseText will recognise. You have:

if($cmd=="deleterec") {
    mysql_query('DELETE FROM AUCTIONS WHERE ARTICLE_NO = ' . $pk);
}

böylece doğru öğeyi siler ama hiç echo 'result=true'; her yerde böylece responseText kontrol denilen açıklamada almak için asla eğer var.

EDIT 3: My current test code (which works fine in firefox [untested in other browsers]).

<script type="text/javascript">
    var xmlHttp;

    function GetXmlHttpObject(){
        var objXMLHttp = null;

        if (window.XMLHttpRequest){
        try{
            objXMLHttp = new XMLHttpRequest();
        }catch (e){
            objXMLHttp = false;
        }
    }else if (window.createRequest){
        try{
            objXMLHttp = new window.createRequest();
        }catch (e){
            objXMLHttp = false;
        }
    }else if (window.ActiveXObject){
        try {
            objXMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }catch (e){
            try {
                objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }catch (e){
                objXMLHttp = false;
            }
        }
    }

    return objXMLHttp;
  }
 function deleteItem(layer, url) {
 var xmlHttp=GetXmlHttpObject();
 if(xmlHttp==null) {
    alert("Your browser is not supported?");
 }
 xmlHttp.onreadystatechange = function() {
    if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
            console.log(xmlHttp.responseText);
            if(xmlHttp.responseText == 'result=true') {
                    var row = document.getElementById(layer);
                    row.parentNode.removeChild(row);
            }
            //document.getElementById(layer).innerHTML=xmlHttp.responseText;
    } else if (xmlHttp.readyState==1 || xmlHttp.readyState=="loading") {
            //document.getElementById(layer).innerHTML="loading";
    }
 }
 xmlHttp.open("GET",url,true);
 xmlHttp.send(null);
 }
 function deleteRec(layer, pk) {
    url = "get_records.php?cmd=deleterec&pk="+pk+"&sid="+Math.random();
    if (confirm("Confirm Delete?")) {
    deleteItem(layer, url);
    }
 }
</script>


<table>
      <tr id="article_260343387801">
      <td><a href="#" onclick="updateByPk()">Name</a></td>
      <td><a href="#" onclick="deleteRec('article_260343387801', '260343387801')">DELETE</a>
      </td>
      </tr>
 </table>

Bu, (benim kişisel test için dışarı yorumladı veritabanı bağlantısı / sorgu malzeme ile) php kodu ile birlikte çalışıyor.

Ben hemen görmüyorum neden:

row.parentNode.removeChild(row);

işe yaramaz ... Eğer gerçekten orada alıyoruz emin misin? Sizin hata raporlama problemlidir:

document.getElementById(layer).innerHTML=xmlHttp.responseText;

'Katman' bir olduğunu ve IE bir innerHTML atanamıyor. Bunun yerine, bir 'Bilinmeyen çalışma zamanı hatası' istisna alacak ve komut duracaktır.

(Artı, bunun etrafında bir olmadan içine doğrudan metin koymak için çalıştı ne olacağını tanımlanmamış olması.)