IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Arrété le mode asynchrone


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 43
    Par défaut [AJAX] Arrété le mode asynchrone
    Bonsoir,

    Je fait une requête Ajax pour vérifier un formulaire. Dans ce formulaire je peux supprimer des éléments. Quand je supprime, j'ai mis en place une confirmation. Le problème c'est si je clique sur annuler dans la confirm la requête s'exécute est supprime mon élément. Est-ce que c'est possible d'arrêté l'asynchrone d' Ajax.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    var xmlHttp = null;
     
    function getXMLHttpRequest(url, id, pressbutton) {
    	try {
    		xmlHttp = new XMLHttpRequest();
    	} catch (e) {
    		try {
    			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    		}
    		catch(e) {
    			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
     
     
     
     
     
    	url = url +"?"+new Date().getTime();
    	xmlHttp.open("POST",url,true);
    	isBusy = true;
     
    	xmlHttp.onreadystatechange = function() { processXmlHttpChange(id, pressbutton); };
    	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    	xmlHttp.setRequestHeader("Cache-Control","no-cache");
     
     
     
     
    	xmlHttp.send('task='+pressbutton+'&cocher='+tabCheckbox(id));
     
     
    }
     
    function processXmlHttpChange(id, pressbutton) {
    	if (xmlHttp.readyState == 4) {
    		if (xmlHttp.status == 200) {	
    			var verification = verif(id, pressbutton, xmlHttp.responseText);
     
    		}
    		else {
    			var erreur  = document.getElementById("error").getElementsByTagName('p');
    			if (erreur.length == 0){
    				var p = Builder.node('p',{id:'erreur'}, "Un probléme est survenue lors du transfert");
    				document.getElementById("error").appendChild(p);
    			}else{
    				if(document.getElementById("erreur").innerHTML != 'Un probléme est survenue lors du transfert'){	
    					document.getElementById("erreur").innerHTML = 'Un probléme est survenue lors du transfert';
    				}else{
    					return true;
    				}
    			}
     
     
    		}
    	}
    }

    La fonction de vérification de formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    function verif(Id, pressbutton, phraseErreur){
     
    	var checkboxes = document.getElementById(Id).getElementsByTagName('input');
    	document.adminForm.task.value=pressbutton;
    	var ErreurPhrase = phraseErreur;
    	result=false;
    	for (var i=0;i<checkboxes.length;i++)
    	{
    		if(checkboxes[i].checked){
    			result=true;	
    			break;
    		}
    	}
     
    	if(result == true){
     
     
    		if (document.adminForm.task.value == "supprimer"){
     
    			confirmation = confirm("Voulez - vous vraiment suppprimer ?");		
    			if (confirmation){
    					if (ErreurPhrase == " "){	
    						document.adminForm.submit();
    						return true;
    					}else{
    						var erreur  = document.getElementById("error").getElementsByTagName('p');
    						if (erreur != null){
     
    							if (erreur.length == 0){
     
    								var p = Builder.node('p',{id:'erreur'}, ErreurPhrase);
    								document.getElementById("error").appendChild(p);
    								Effect.BlindDown("error");
    								return true
    							}else{			
    								if(document.getElementById("erreur").innerHTML == ErreurPhrase){	
    									return true;
    								}else{
    									document.getElementById("erreur").innerHTML = ErreurPhrase;	
    									return true;
    								}
    							}
    						}
     
    					}
    			}else{
    				document.adminForm.reset();	
    				return false;
    			}
     
    		}
    	}
     
    	if (result == false){
    		var erreur  = document.getElementById("error").getElementsByTagName('p');
    		if (erreur != null){
    			if (erreur.length == 0){
    				var p = Builder.node('p',{id:'erreur'}, ErreurPhrase);
    				document.getElementById("error").appendChild(p);
    				Effect.BlindDown("error");
    				return true
    			}else{			
    				if(document.getElementById("erreur").innerHTML == ErreurPhrase){	
    					return true;
    				}else{
    					document.getElementById("erreur").innerHTML = ErreurPhrase;	
    				}
    			}
    		}
    	}
     
    }

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    a priori c'est plutôt que ta demande de confirmation est mal placée : tu ne devrait pas encore avoir initié l'appel Ajax au moment de cette demande.
    Ceci dit, comme on ne voit pas l'appel Ajax dans ton code, pas possible de t'indiquer mieux ...

    Pour répondre quand même à la question, tu peux l'interrompre avecA+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 43
    Par défaut
    T'entend par quoi on ne voit pas l'appel Ajax???

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par doc51 Voir le message
    T'entend par quoi on ne voit pas l'appel Ajax???
    Dans ton code n'apparait pas l'appel à getXMLHttpRequest() ...
    Il doit être dans la partie HTML, je suppose.

    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 43
    Par défaut
    Voici mon appel ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <li><a href="javascript:void(0)" class="toutSuppr" onclick="javascript:getXMLHttpRequest('public_html/menu/Supprimer_menu.php', 'formtableau', 'supprimer');"><span>Supprimer</span></li>
    Mais j'ai déja essai avec xmlHttp.abort(); mais sa ne marche pas.

    Voici les différentes solutions qui n'ont pas marcher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
    var xmlHttp = null;
     
    function getXMLHttpRequest(url, id, pressbutton) {
    	try {
    		xmlHttp = new XMLHttpRequest();
    	} catch (e) {
    		try {
    			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    		}
    		catch(e) {
    			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
     
     
     
     
     
    	url = url +"?"+new Date().getTime();
    	xmlHttp.open("POST",url,true);
    	isBusy = true;
     
    	xmlHttp.onreadystatechange = function() { processXmlHttpChange(id, pressbutton); };
    	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    	xmlHttp.setRequestHeader("Cache-Control","no-cache");
     
     
     
     
    	xmlHttp.send('task='+pressbutton+'&cocher='+tabCheckbox(id));
     
     
    }
     
    function processXmlHttpChange(id, pressbutton) {
    	if (xmlHttp.readyState == 4) {
    		if (xmlHttp.status == 200) {	
    			var verification = verif(id, pressbutton, xmlHttp.responseText);
    			if (verification == false)
    			{
    				xmlHttp.abort();
    			}
     
    		}
    		else {
    			var erreur  = document.getElementById("error").getElementsByTagName('p');
    			if (erreur.length == 0){
    				var p = Builder.node('p',{id:'erreur'}, "Un probléme est survenue lors du transfert");
    				document.getElementById("error").appendChild(p);
    			}else{
    				if(document.getElementById("erreur").innerHTML != 'Un probléme est survenue lors du transfert'){	
    					document.getElementById("erreur").innerHTML = 'Un probléme est survenue lors du transfert';
    				}else{
    					return true;
    				}
    			}
     
     
    		}
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    var xmlHttp = null;
    var isBusy = null;
    function getXMLHttpRequest(url, id, pressbutton) {
    	try {
    		xmlHttp = new XMLHttpRequest();
    	} catch (e) {
    		try {
    			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    		}
    		catch(e) {
    			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
     
     
    	if (isBusy == false)
    	{
    		xmlhttp.onreadystatechange = function () {};
    		xmlhttp.abort();
    	}
     
     
     
    	url = url +"?"+new Date().getTime();
    	xmlHttp.open("POST",url,true);
    	isBusy = true;
     
    	xmlHttp.onreadystatechange = function() { processXmlHttpChange(id, pressbutton); };
    	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    	xmlHttp.setRequestHeader("Cache-Control","no-cache");
     
     
     
     
    	xmlHttp.send('task='+pressbutton+'&cocher='+tabCheckbox(id));
     
     
    }
     
    function processXmlHttpChange(id, pressbutton) {
    	if (xmlHttp.readyState == 4) {
    		if (xmlHttp.status == 200) {	
    			var verification = verif(id, pressbutton, xmlHttp.responseText);
    			if (verification == false)
    			{
    				isBusy = false;
    			}
     
    		}
    		else {
    			var erreur  = document.getElementById("error").getElementsByTagName('p');
    			if (erreur.length == 0){
    				var p = Builder.node('p',{id:'erreur'}, "Un probléme est survenue lors du transfert");
    				document.getElementById("error").appendChild(p);
    			}else{
    				if(document.getElementById("erreur").innerHTML != 'Un probléme est survenue lors du transfert'){	
    					document.getElementById("erreur").innerHTML = 'Un probléme est survenue lors du transfert';
    				}else{
    					return true;
    				}
    			}
     
     
    		}
    	}
    }

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Dans ta 2° version, y a quelques problèmes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	if (isBusy == false)
    	{
    		xmlhttp.onreadystatechange = function () {};
    		xmlhttp.abort();
    	}
    1. le abort() c'est dans le cas où isBusy == true
    2. c'est xmlHttp
    3. il faut mettre l'appel dans un "else" : soit il est déjà en cours (isBusy) et dans ce cas tu l'abort(), soit il est pas en cours et dans ce cas tu fais l'appel (open()

    A+

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/02/2008, 18h40
  2. Ajax, Arrêté à l'état 1
    Par Andalor dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/07/2007, 11h34
  3. question sur l'arrêt du "mode debug"
    Par cramerao dans le forum Access
    Réponses: 10
    Dernier message: 23/05/2007, 16h49
  4. [AJAX] Annuler une requête asynchrone server side
    Par Matthieu Bissat dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/01/2007, 20h42
  5. [.NET] Une question technique a propos du mode asynchrone
    Par nicknolt dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 08/06/2004, 10h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo