/* classe API */ function APIClass(){}; APIClass.prototype = { xhr: [], // tableau d'objets pour les requêtes ajax /* transaction avec le serveur (API.php) * * @param pRequest l'objet passé en JSON à API.php * @param pHandler fonction qui s'éxécutera lors de la réponse (1 argument -> réponse) * * @return answer l'objet retourné par API.php via pHandler (1er argument) * *************************************************************************************************** * * @usecase * 1. var answerObject = sendRequest( * 2. { var1: "exemple", var2: 198294 }, * 3. function(rep){ alert(rep); } * 4. ); * @explain * 1. on appelle la fonction <=> on créé la requête * 2. on passe l'objet qui sera envoyé * 3. on passe une fonction qui utilise un argument (sera la réponse de API.php) (sous forme d'objet) * */ send: function(pRequest, pHandler){ // on efface les requêtes qui sont terminées (toutes celles de this.xhr) for( var i = 0 ; i < this.xhr.length ; i++ ){ if( this.xhr[i].readyState == 4 ) // si terminée this.xhr = this.xhr.slice(0,i-1).concat(this.xhr.slice(i,this.xhr.length-1)); // suppression entrée } // on créé une nouvelle entrée this.xhr.push(null); i = this.xhr.length-1; // création de l'objet AJAX if(window.XMLHttpRequest) // IE7+, Firefox, Chrome, Opera, Safari this.xhr[i] = new XMLHttpRequest(); else // IE5, IE6 this.xhr[i] = new ActiveXObject('Microsoft.XMLHttpRequest'); console.log(pRequest); var ptrAPI = this; this.xhr[i].onreadystatechange = function(){ if( ptrAPI.xhr[i].readyState == 4 ){ // si la requête est terminée /* DEBUG : affiche la réponse BRUTE de API.php */ // console.log('API.php => '+ptrAPI.xhr[i].responseText); console.log( JSON.parse(ptrAPI.xhr[i].responseText) ); /* si success de requête */ if( [0,200].indexOf(ptrAPI.xhr[i].status) > -1 ){ // si fichier existe et reçu try{ pHandler( JSON.parse(ptrAPI.xhr[i].responseText) ); } // si on peut parser, on envoie catch(e){ pHandler({request:'corrupted'}); } // sinon on envoie obj.request = 'corrupted' } /* sinon retourne obj.request = 'unreachable' */ else pHandler({request: 'unreachable'}); } } // on créé un formulaire POST (virtuel) var form = new FormData(); form.append('json', JSON.stringify(pRequest) ); // on créé la variable $_POST['json']=>request this.xhr[i].open('POST', 'API.php', true); this.xhr[i].send( form ); } };