Bonjour !
Je travaille actuellement à un projet d'interface web Full AJAX.
Lors du chargement initial du site, je "construit" le DOM de la page grâce à des successive via xmlHttpRequest.
Je charge par exemple le header via une première requête, puis la structure de la page, puis le menu, puis le bloc "contenu" centre, etc.
J'utilise pour cela une fonction unique nommé loadModule qui prend en paramètre l'adresse du module à charger, les paramètre avec les quels le charger, et la cible (l'id) où le charger dans la structure de la page XHTML.
Le premier chargement se fait sans problème, mais le problème que je rencontrer c'est que lorsque j'appelle une seconde fois la même fonction le script plante, car la première requête n'est pas terminée.
Voila ci dessous pour les sources qui peuvent être utiles pour comprend mon problème...
loadModule.js
et dans la page, le chargement successif :
Le premier chargement fonctionne donc sans problème, mais le deuxième venant directement après génère l'erreur alert('Erreur!'); , je pense (mais peut être que je me trompe ?) parce que le readystate de la première readystate de la première n'est pas encore arrivé à l'état 4.
J'ai fais beaucoup de recherche mais je n'ai pas trouvé grand chose...
Je voudrais trouver une solution pour faire patienter le second script dans que l'objet readystate de la précédente requête n'est pas arrivé à 4.
Malheureusement JS n'est pas un langage qui aime patienter de ce que j'ai pu voir des résultat des essais que j'ai fait jusqu'ici ...
(Par ailleurs je sais que cette idée de site full ajax va en faire crier plus d'un sur ce cher site Strasbourgeois, mais je ne suis pas ici pour parler d'accessibilité
)
(Et, non, je ne tiens absolument pas à utiliser un framework comme jQuery
)
Merci de votre aide
Modifié par nakwa (16 Jun 2009 - 15:12)

Je travaille actuellement à un projet d'interface web Full AJAX.
Lors du chargement initial du site, je "construit" le DOM de la page grâce à des successive via xmlHttpRequest.
Je charge par exemple le header via une première requête, puis la structure de la page, puis le menu, puis le bloc "contenu" centre, etc.
J'utilise pour cela une fonction unique nommé loadModule qui prend en paramètre l'adresse du module à charger, les paramètre avec les quels le charger, et la cible (l'id) où le charger dans la structure de la page XHTML.
Le premier chargement se fait sans problème, mais le problème que je rencontrer c'est que lorsque j'appelle une seconde fois la même fonction le script plante, car la première requête n'est pas terminée.
Voila ci dessous pour les sources qui peuvent être utiles pour comprend mon problème...
loadModule.js
var httpReqObjetRep = createHttpReq();
var showErrors = true;
function handleRequestStateChangeRep(cible) {
if (httpReqObjetRep.readyState == 4) {
if (httpReqObjetRep.status == 200) {
try{
includeReponse(cible);
}
catch(e){
displayError(e.toString());
}
}
else{
displayError(httpReqObjetRep.statusText);
}
}
}
function includeReponse(cible){
var reponseScript = httpReqObjetRep.responseText;
document.getElementById(cible).innerHTML=reponseScript;
}
function loadModule(module,param,cible){
if (httpReqObjetRep){
try
{
if (httpReqObjetRep.readyState == 4 || httpReqObjetRep.readyState == 0) {
var cacheContent = cache.shift();
httpReqObjetRep.open("POST", 'modules/'+module+'/'+module+'.ajax.php?'+param, true);
httpReqObjetRep.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
httpReqObjetRep.onreadystatechange = function() {handleRequestStateChangeRep(cible); }
httpReqObjetRep.send(cacheContent);
}
else {
alert('Erreur');
}
}
catch (e){
displayError(e.toString());
}
}
}
et dans la page, le chargement successif :
<script>
loadModule('window','keychild=logon','page');
loadModule('window','1','window');
</script>
Le premier chargement fonctionne donc sans problème, mais le deuxième venant directement après génère l'erreur alert('Erreur!'); , je pense (mais peut être que je me trompe ?) parce que le readystate de la première readystate de la première n'est pas encore arrivé à l'état 4.
J'ai fais beaucoup de recherche mais je n'ai pas trouvé grand chose...
Je voudrais trouver une solution pour faire patienter le second script dans que l'objet readystate de la précédente requête n'est pas arrivé à 4.
Malheureusement JS n'est pas un langage qui aime patienter de ce que j'ai pu voir des résultat des essais que j'ai fait jusqu'ici ...
(Par ailleurs je sais que cette idée de site full ajax va en faire crier plus d'un sur ce cher site Strasbourgeois, mais je ne suis pas ici pour parler d'accessibilité

(Et, non, je ne tiens absolument pas à utiliser un framework comme jQuery

Merci de votre aide

Modifié par nakwa (16 Jun 2009 - 15:12)