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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
   | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ah>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>AJAX ABORT</title>
<script>
	// Objet XMLHttpRequest global re-utilise pour chaque requete serveur
	var XhrObj = null;  
	
	/*
	* Fonction de demarrage d'une requete
	*/
	function startRequest()
	{		
		// creation de l'objet global XMLHttpRequest
		if (XhrObj == null)
		{    
		   if(typeof(XMLHttpRequest) != 'undefined')
		   {
		      // Mozilla 
		   	XhrObj = new XMLHttpRequest();      
		   }
		   else
		   {
		      // Noms des activeX des differentes versions d'IE
		   	var axO = ['Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'], i;
		   
		   	for(i = 0; i < axO.length; i++)
		      {
		   		try
		         {
		   			XhrObj = new ActiveXObject(axO);
		            break;
		   		}
		         catch(e)
		         {
		         }
		      }
		   }
		}   	   
	   XhrObj.open("POST", '/MySiteLocal/AjaxServlet', true);   
	   XhrObj.onreadystatechange = test;
	   
	   var data = 'ajaxAbort=true';
	   XhrObj.setRequestHeader('Content-Length', data.length);
		XhrObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');		
		XhrObj.send(data);
	}				
	
	/*
	* Fonction callback onreadystatechange
	*/
	function test()
	{
		if (XhrObj.readyState != 4)
			return;
			
		if (abort)
		{
			abort = false;
			return;
		}
		if ((XhrObj.status <= 200) && (XhrObj.status < 300))			
			alert('Requete OK');
		else
			alert('Requete NON OK');
	}
	
	var EMPTY_FCT = function () {}
	var abort = false;
	
	/*
	* Fonction d'annulation d'une requete AJAX
	* restart : indique s'il faut relancer une requete dans la foulee
	*/
	function abortRequest1(restart)
	{		
		abort = true;
		XhrObj.abort();
		XhrObj.onreadystatechange = EMPTY_FCT;		
		if (restart)		
			startRequest();		
	}						
	
	/*
	* Fonction d'annulation d'une requete AJAX
	* restart : indique s'il faut relancer une requete dans la foulee
	*/
	function abortRequest2(restart)
	{		
		abort = true;
		XhrObj.abort();
		XhrObj.onreadystatechange = EMPTY_FCT;		
		if (restart)		
			setTimeout ('startRequest(false)', 50);								
	}						
</script>
</head>
<body>		
	<input type='button' value='Demarrer Requete' onclick='startRequest();'/>
	<input type='button' value='Annuler Requete' onclick='abortRequest1(false);'/>
	<input type='button' value='Annuler Requete et redemarrer version 1' onclick='abortRequest1(true);'/>	
	<input type='button' value='Annuler Requete et redemarrer version 2' onclick='abortRequest2(true);'/>	
</body>
</html> | 
Partager