11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
Travaillant actuellement sur un site utilisant beaucoup la technologie ajax, j'essaie de limiter les appels qui sont faits, afin de soulager le serveur en cas de latence par exemple.
Concrètement, j'essaie de créer un objet standard utilisé pour mes appels Ajax en JQuery, permettant de bloquer l'appel Ajax si un appel est déjà en cours.

Ma première question est de savoir ce que vous en pensez, et si vous connaissez des scripts existants dans ce style là.

J'ai commencé un bout d'objet, mais je rencontre quelques problèmes, voici comment j'aimerais l'utiliser :


var ah = new AjaxHandler();

// ah.call( 'nom_du_ficher_ajax.php', {parametres}, callback );

// Premier appel Ajax
ah.call( 'test.php', {id: 1}, function(data){alert('mon post "'+data+'"');} );

// si le premier post n'est pas terminé, ce deuxieme appel doit afficher un message d'erreur a l'utilisateur, et l'appel Ajax n'est pas effectué
ah.call( 'test.php', {id: 1}, function(data){alert('mon post "'+data+'"');} );


Voici l'objet en question :


function AjaxHandler(){
	
	this.query;
	
	this.call = function(file, vars, callback){
		
		if( this.query == null ){ // il n'y a pas d'appel Ajax en cours (avec JQuery)
			this.query = $.post(file, vars, function(data){callback(); ah.end();});
		}
		else{ // Un appel est déjà en cours
			show_message('The server is working. Please try later.');
		}
	}
	
	this.end = function(){
		this.query = null;
	}
}


Le problème est que ma fonction de callback n'a pas accès à la variable data, et donc je ne peux pas gérer à ma facon le retour de la methode post.
Avant de m'arracher les cheveux la dessus, j'aimerais donc savoir si c'est déjà venu à l'idée à quelqu'un de coder un truc dans le genre, et s'il n'existe pas une solution plus simple.

Merci Smiley cligne
Modifié par avri (05 Aug 2010 - 18:06)
Merci pour ces liens ZeB_panam, ils sont intéressants (je ne connaissais pas ces plugins).

Ce n'est pas exactement ce que je cherche, mais ca me servira pour d'autres choses.
En fait, ces plugins permettent de synchroniser les appels Ajax entre eux, et de personnaliser le comportement à avoir en cas de multiples requêtes (stopper les anciennes requêtes par exemple).
Ce que je cherche, c'est plutot l'inverse, à savoir laisser la première requête se terminer et interdire la nouvelle (pour bloquer l'application tant que l'appel n'est pas terminé).

Au final, les comportements sont assez similaires donc il ne doit pas être difficile de coder ca, en se basant sur ces plugins.