projet-php/js/lib/API.js

85 lines
2.8 KiB
JavaScript
Raw Normal View History

/* classe API */
function APIClass(){};
APIClass.prototype = {
xhr: [], // tableau d'objets pour les requêtes ajax
/* transaction avec le serveur (managers)
*
* @param pRequest<Object> l'objet passé en JSON à API.php
* @param pHandler<Function> fonction qui s'éxécutera lors de la réponse (1 argument -> réponse<Object>)
*
* @return answer<Object> 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)
*
*/
2015-12-14 10:01:35 +00:00
send: function(pCommand, 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');
2015-12-15 08:19:59 +00:00
console.log(pRequest);
2015-12-15 08:19:59 +00:00
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('managers/ => '+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({status:'corrupted'}); } // sinon on envoie obj.status = 'corrupted'
}
/* sinon retourne obj.status = 'unreachable' */
else
pHandler({status: 'unreachable'});
}
}
// on créé un formulaire POST (virtuel)
var form = new FormData();
2015-12-14 10:01:35 +00:00
form.append('command', pCommand ); // on créé la variable $_POST['json']=>request
// on envoie l'objet sous forme de _POST distincts
for( obj in pRequest )
form.append(obj, pRequest[obj]);
2015-12-14 10:01:35 +00:00
this.xhr[i].open('POST', '/managers/', true);
2015-12-15 08:19:59 +00:00
// on définit le HEADER
2015-12-17 09:58:06 +00:00
this.xhr[i].setRequestHeader('X-REQUESTED-WITH', 'XMLHttpRequest');
this.xhr[i].send( form );
}
};