par
sadeq » 07 mai 2009, 01:17
Le problème est que le traitement Ajax est asynchrone donc il ne peut plus annuler un traitement qui est parallèle et qui en temps réel le dépasse dans le temps.
Alors tu as 2 solutions : la première est de basculer Ajax en mode synchrone, comme ça, l'interpréteur javascript attendra le résultat Ajax pour continuer et à ce moment là les return false ou true feront effet sur l'événement en cours qui est le clique sur le lien et donc le return false annule l'action.
Je rappelle que pour passer au mode synchrone il faut mettre à false le dernier paramètre de la fonction .open() comme :
La 2° solution pour rester dans le mode asynchrone (parallèle) qui donne à Ajax tout son atout, il faut appeler le script php "Delete_rla_cluster.php?id=..." qui effectue la suppression dans la procédure qui intercepte la réponse Ajax. Pour cela il ne faut plus appeler ce script par le HREF du lien mais par un appel Ajax.
Exemple:
Code : Tout sélectionner
function Verif_delete(i, id) // i pour la vérif et id pour la suppr après vérif et confirm
{
var piloting=document.getElementById("Piloting"+i).value;
creerRequete();
var url='Verif_delete.php?Piloting='+piloting;
requete.open('GET',url,true);
requete.onreadystatechange = traiteReponse1(id);
requete.send(null);
}
function traiteReponse1(id)
{
if(requete.readyState == 4) // Complete
{
if(requete.status == 200)
{
if(requete.responseText!="")
{
var pilote=requete.responseText;
alert(pilote);
if (pilote==1)
{ alert(" impossible to delete this profile:Please cretae a new profil with the same Piloting zone");
return false;
}
else if(pilote !=1)
{
if(confirm('are you sure you want to delete this profile?'))
{
// suppression confirmée => appel du script de suppression
creerRequete();
var url='Delete_rla_cluster.php?id='+id; // le paramètre id est passé
requete.open('GET',url,true);
requete.onreadystatechange = traiteReponse2;
requete.send(null);
}
else
{
return false;
}
}
}
}
}
}
function traiteReponse2()
{
if(requete.readyState == 4) // Complete
{
if(requete.status == 200)
{
if(requete.responseText == 1) alert('Suppression effectuée');
else alert('Suppression non effectuée !');
}
}
}
Et pour le code HTML qui appelle ce script, on n'a plus besoin du lien HREF:
<img src="../img/actions/annulation_small.gif" border="0" alt="Supprimer" onclick="Verif_delete('<?php echo $i; ?>', '<?php echo $id;?>')" /a>
Pour plus d'infos sur le fonctionnement d'Ajax :
https://developer.mozilla.org/fr/AJAX/Premiers_pas
Le problème est que le traitement Ajax est asynchrone donc il ne peut plus annuler un traitement qui est parallèle et qui en temps réel le dépasse dans le temps.
Alors tu as 2 solutions : la première est de basculer Ajax en mode synchrone, comme ça, l'interpréteur javascript attendra le résultat Ajax pour continuer et à ce moment là les return false ou true feront effet sur l'événement en cours qui est le clique sur le lien et donc le return false annule l'action.
Je rappelle que pour passer au mode synchrone il faut mettre à false le dernier paramètre de la fonction .open() comme : [code]requete.open('GET',url,false); [/code]
La 2° solution pour rester dans le mode asynchrone (parallèle) qui donne à Ajax tout son atout, il faut appeler le script php "Delete_rla_cluster.php?id=..." qui effectue la suppression dans la procédure qui intercepte la réponse Ajax. Pour cela il ne faut plus appeler ce script par le HREF du lien mais par un appel Ajax.
Exemple:
[code]
function Verif_delete(i, id) // i pour la vérif et id pour la suppr après vérif et confirm
{
var piloting=document.getElementById("Piloting"+i).value;
creerRequete();
var url='Verif_delete.php?Piloting='+piloting;
requete.open('GET',url,true);
requete.onreadystatechange = traiteReponse1(id);
requete.send(null);
}
function traiteReponse1(id)
{
if(requete.readyState == 4) // Complete
{
if(requete.status == 200)
{
if(requete.responseText!="")
{
var pilote=requete.responseText;
alert(pilote);
if (pilote==1)
{ alert(" impossible to delete this profile:Please cretae a new profil with the same Piloting zone");
return false;
}
else if(pilote !=1)
{
if(confirm('are you sure you want to delete this profile?'))
{
// suppression confirmée => appel du script de suppression
creerRequete();
var url='Delete_rla_cluster.php?id='+id; // le paramètre id est passé
requete.open('GET',url,true);
requete.onreadystatechange = traiteReponse2;
requete.send(null);
}
else
{
return false;
}
}
}
}
}
}
function traiteReponse2()
{
if(requete.readyState == 4) // Complete
{
if(requete.status == 200)
{
if(requete.responseText == 1) alert('Suppression effectuée');
else alert('Suppression non effectuée !');
}
}
}
[/code]
Et pour le code HTML qui appelle ce script, on n'a plus besoin du lien HREF:
[php]
<img src="../img/actions/annulation_small.gif" border="0" alt="Supprimer" onclick="Verif_delete('<?php echo $i; ?>', '<?php echo $id;?>')" /a>
[/php]
Pour plus d'infos sur le fonctionnement d'Ajax : https://developer.mozilla.org/fr/AJAX/Premiers_pas