Aller au contenu

Sujets conseillés

Posté

Bonjour,

Je cherche à recharger des div dans une page toutes les X secondes. Mon script Ajax ne fonctionne pas car il fait planter le site. Avez-vous une idée pourquoi ?

<script type="text/javascript">
function envoieRequete(url,id,url2,id2)
{
var xhr_object = null;
var xhr_object2 = null;
var position = id;
var position2 = id2;

if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();
else
if (window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");

if(window.XMLHttpRequest) xhr_object2 = new XMLHttpRequest();
else
if (window.ActiveXObject) xhr_object2 = new ActiveXObject("Microsoft.XMLHTTP");



// On ouvre la requete vers la page désirée 1
xhr_object.open("GET", url, true); //ici false au lieu de true
xhr_object.onreadystatechange = function(){
if ( xhr_object.readyState == 4 )
{
// j'affiche dans la DIV spécifiées le contenu retourné par le fichier
document.getElementById(position).innerHTML = xhr_object.responseText;
}
}
xhr_object.send(null);
xhr_object2.open("GET", url2, true);//ici false au lieu de true
xhr_object2.onreadystatechange = function(){
if ( xhr_object2.readyState == 4 )
{
// j'affiche dans la DIV spécifiées le contenu retourné par le fichier
document.getElementById(position2).innerHTML = xhr_object2.responseText;
}
}
xhr_object2.send(null);
// dans le cas du get



//envoieRequete(url,id);
setTimeout(envoieRequete(url,id),1000);

}

</script>

Merci d'avance pour votre aide

Posté (modifié)

Salut,

C'est une fonction récursive lancée chaque seconde, et qui à chaque fois re-instancie tous les objets : ça doit consommer des ressources et ça ne doit pas aider le script à tourner "rond" je pense...

Je pense qu'il serait préférable d'instancier les objets une fois pour toutes, et ensuite boucler la requête au serveur.

Sinon, utilise Firebug pour voir ce qui se passe ;)

Modifié par Ernestine
Posté

Ernestine,

J'ai fait à peu près le même diagnostic que toi, mais je n'arrive pas à trouver comment faire pour instancier une fois pour toute. Tu aurais une idée ?

Merci d'avance

Posté

Bonjour,

Essaie ceci avec Jquery :


var astuce_num = 0;
var astuce_reg=new RegExp("[_]+", "g");
function ShowAstuceBox(){
$.ajax({
method: 'get',
url : 'astuces.php?astuce_num=' + astuce_num,
dataType : 'text',
success: function (text) {
var temp = text;
temp = temp.split(astuce_reg);
astuce_num = parseFloat(temp[0])+1;
$('#astuce').slideToggle('slow', function() {
$('#astuce').html(temp[1]);
$('#astuce').slideToggle('slow');
});
}
});

}
setInterval(ShowAstuceBox, 7500);

Bon courage

Portekoi

Posté

Ernestine,

J'ai fait à peu près le même diagnostic que toi, mais je n'arrive pas à trouver comment faire pour instancier une fois pour toute. Tu aurais une idée ?

Es-tu vraiment obligé de lancer une fonction récursive pour quelque chose d'aussi simple, à savoir le rechargement de div à intervalles de temps réguliers ? Pourquoi ne pas faire une fonction qui recharge le div (via Ajax), et appeler cette fonction "de l'extérieur", dans une autre boucle ?

Posté

Ah mais je ne demande pas mieux que de ne pas avoir de boucle récursive. C'est juste que je ne trouve pas comment faire pour recharger un div toutes les X secondes autrement.

Posté (modifié)

Pour une action répétée tu as la fonction setInterval

Par exemple :


function rechargerDiv() {
// Contenu de ta fonction qui recharge les div
}
setInterval(rechargerDiv, 1000);

C'est quand même beaucoup mieux que de faire appeler la fonction par elle-même indéfiniment.

Sinon, comme le conseille Portekoi, avec JQuery, c'est quand même plus pratique.

Et en cas de problème, utilise Firebug pour savoir où est l'erreur, ce sera quand même plus facile à diagnostiquer que le coup du, je cite : "mon script Ajax ne fonctionne pas car il fait planter le site." ;)

Modifié par Ernestine

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...