var XHRTimer; function getXHRObject(){ var XHR=null; if (window.XMLHttpRequest) { XHR = new XMLHttpRequest(); }else if(window.ActiveXObject){ try{ XHR=new ActiveXObject("Msxml2.XMLHTTP"); }catch (e){ try{ XHR=new ActiveXObject("Microsoft.XMLHTTP"); }catch (e){ return null; } } } return XHR; } // CORRIGER LA METHODE DE DETECTION DE TIMETOUT // Si on envoit des requetes successives trop rapidement, le delai avant l'alerte de timeout n'est pas cleare // On a acces a SESSION. On pourrait l'inclure automatiquement si elle est settee, plutot que de demander de l'inclure dans les infos de pages // ... function XHRQuery(page,method,data,response,handler,sync) { var XHR=getXHRObject(); if(!XHR){ alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...'); return false; } data+='&nocache='+Math.random()*100000; if(page.indexOf('sellocation')==0){ page="/inc/js/"+page; } if(!method){ method='get'; } if(response){ response=response.toLowerCase(); } // ie6 a besoin des params dans le url, pas dans send() if(page.indexOf('?')==-1){ page+='?'+data; } else{ page+='&'+data; } var async=true; if(sync){ async=false; } XHRTimer=setTimeout(XHRTimeout,10000); XHR.open(method,page,async); if(async){ // asynchonous XHR.onreadystatechange = function() { if (XHR.readyState == 4) { force_return=XHRCallback(XHR,response,handler); if(force_return){ return force_return; } } } } if(method.toLowerCase()=='post'){ XHR.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); } XHR.send(data); if(!async){ // synchronous force_return=XHRCallback(XHR,response,handler); if(force_return){ return force_return; } } } function XHRCallback(XHR,response,handler){ if(XHRTimer){ clearTimeout(XHRTimer); } if(XHR.status==200){ var result; if(response=='xml'){ result=XHR.responseXML.documentElement; }else{ result=XHR.responseText; } if(typeof handler == 'function'){ handler(result); }else if(handler=='RETURN'){ return result; }else{ eval(result); } }else if(XHR.status==403){ // session expiree top.location.replace("/error/expire.php"); }else if(XHR.status!=0){ // erreur de connection (404, 500, etc.) alert('ERROR '+XHR.status+": "+XHR.statusText); } } function XHRTimeout(){ // alert('Error: Request timeout'); if(XHRTimer){ clearTimeout(XHRTimer); } }