Autor Zpráva
tachov
Profil
prosím jak mám pořešit mazání singů z playlistu .
výpis mám pořešení z sql databáze takto :

  $dotaz = mysql_query("SELECT * FROM `music`");
              while($zaznam = MYSQL_Fetch_Array($dotaz)):
                $idsong = $zaznam["idsong"];
                $skladatel = $zaznam["skladatel"];
                $album = $zaznam["album"];
                $namesong = $zaznam["namesong"];
                $cover = $zaznam["cover"];
                $url = $zaznam["url"];                    
                            

    echo "<li id='$idsong' song='$url' cover='$cover' artist='$skladatel'>$skladatel ( $album ) $namesong 
    </li><a href='javascript:deletemp(\"$url\"),deletempa(\"$cover\"),loadplaylist()'><img src='./img/cross.png' style='width:20px;height:20px;z-index:500;' id='kross' class='kros' title='' /></a>";
     endwhile;        
                ?>    

a script pro mazání :
function deletemp(url){
    
    if (window.XMLHttpRequest)
    {
        var xmlhttp=new XMLHttpRequest();
    }
    else
    {
        var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET","unlink.php?url="+url,true);
    xmlhttp.send();     
    xmlhttp.onreadystatechange=function() 
    
    {      
        if (xmlhttp.readyState==4 && xmlhttp.status==100) 
        {         
           
        }
    }

}
function deletempa(cover){
    
    if (window.XMLHttpRequest)
    {
        var xmlhttp=new XMLHttpRequest();
    }
    else
    {
        var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET","unlink.php?cover="+cover,true);
    xmlhttp.send();     
    xmlhttp.onreadystatechange=function() 

    {      
        if (xmlhttp.readyState==4 && xmlhttp.status==100)
        {         
           
        }
    }  
 }
function loadplaylist(){
    $("#playlist").load("./playlist.php");
    }
</script>

ale je vždy potřeba kliknout 2x
Bez_názvu.jpg
Profil *
Zdravim,
nejspíš to bude tim, že v okamžiku, kdy se volá loadplaylist(), se ještě do databáze nepromítly změny z volání deletemp() a deletempa().

Ta volání sou asynchronní, takže bys měl počkat, až se jedna akce dokončí (mazání), abys věděl, že databáze už je v jinym stavu a můžeš ho načíst (loadplaylist).

Já bych to vyřešil tak, že bych deletemp a deletempa sloučil do jedný metody, a loadplaylist bych volal až když tyhle akce úspěšně proběhnou.

Naznačim:
<a href='javascript:deletemp(\"$url\", \"$cover\")'>

function deletemp(url, cover){
    
    if (window.XMLHttpRequest)
    {
        var xmlhttp=new XMLHttpRequest();
    }
    else
    {
        var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET", "unlink.php?url=" + url + "&cover=" + cover, true);
    xmlhttp.send();     
    xmlhttp.onreadystatechange=function() 
    
    {      
        if (xmlhttp.readyState==4 && xmlhttp.status==100) 
        {         
           loadplaylist(); // věci sou smazaný, takže můžu načíst aktuální stav
        }
    }
}

Tímhle způsobem pro každý smazání potřebuješ 2 požadavky na server a navíc pokaždý překresluješ celej obsah elementu #playlist.

Efektivnější způsob je v odpovědi vrátit pouze příznak úspěch/neúspěch (jestli byla písnička smazaná, nebo ne) a pokud se povedlo, tak smazat element reprezentující smazanou písničku.

Další možnost je v odpovědi na smazání vrátit výsledný stav (seznam skladeb), tudíž by odpadlo volání metody loadplaylist, ale překreslíš celý seznam písniček, i když ti stačí smazat jeden element. Nebo můžeš tento seznam projít a porovnat s tim, co zobrazuješ a jenom provést změny.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: