SpoonS2K
Messages postés13Date d'inscriptionsamedi 12 juillet 2008StatutMembreDernière intervention17 juillet 2008
-
12 juil. 2008 à 15:15
banbanfr
Messages postés132Date d'inscriptiondimanche 8 janvier 2006StatutMembreDernière intervention15 février 2011
-
17 juil. 2008 à 16:29
Bonjour,
après moultes recherches et avoir tourné le truc dans tout les
sens, je m'en remet à vous. Je débute dans le Javascript, et dèja je
m'aperçois qu'il a des différences entre les divers navigateurs qui
existent...
J'ai un script qui est censé utiliser XMLHttpRequest pour récuperer des données a partir
d'un script PHP, et ensuite mettre à jour ma page sans rechargement.
Mon script fonctionne impec sous Firefox, sous Opera, mais
impossible de lui faire savoir quoi que ce soit sous Internet Explorer
et Safari (Mac et PC).
Je deviens fou, voici mon code:
function recup() {
var idProgress=document.getElementById("progress_key").value;
var xhr= null;
if(window.XMLHttpRequest)
xhr = new XMLHttpRequest();
else if(window.ActiveXObject)
xhr = new ActiveXObject("Microsoft.XMLHTTP");
else {
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}
var repXhr=this.responseText; //récupération de la réponse du serveur via l'objet xmlHttpRequest (this)
if (this.readyState == 4) {
var objRep=eval('('+repXhr+')');
}
document.getElementById("sec").innerHTML=objRep.est_sec+" secondes restantes";
var i = objRep.bytes_uploaded;
var j = objRep.bytes_total;
var percent = Math.ceil(i*100/j);
var pix = percent*300/100;
document.getElementById("p_pc").innerHTML=percent+"%";
document.getElementById("p_barre").style.width=parseInt(pix)+"px";
if (percent!=100) { recup(); }
}
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 12 juil. 2008 à 15:24
Bonjour,
>>je m'aperçois qu'il a des différences entre les divers navigateurs qui existent...
doux euphémisme... hélas.
>> xhr.onload= maj;
?? étonné que ça baigne avec FF d'ailleurs !
c'est pour le xml "normalement" ( mais qu'y a-t-il de normal ? ) pas pour ajax
tu utilises la méthode asynchrone : xhr.open("GET","progress.php?progress_key="+idProgress, true );
il faut attendre la réponse du serveur, et pas avec onload.
xhr..onreadystatechange = function()
{ if(xml.readyState == 4)
{ la réponse a été reçue... reste à tester si status==200
et faire le boulot
SpoonS2K
Messages postés13Date d'inscriptionsamedi 12 juillet 2008StatutMembreDernière intervention17 juillet 2008 12 juil. 2008 à 20:25
Bon je reviens à la charge... J'ai réécris completement mon code, ca marche impec sur Firefox et Opera.
function getstatus() {
var xhr = null;
if(window.XMLHttpRequest) // Firefox
xhr = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xhr = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}
var idProgress = document.getElementById("clef").value;
Seulement Internet Explorer m'affiche bien les reponses que je veux mais une seule fois... En fait on a l'impression qu'il bloque sur if (percent!=100) { getstatus(); }, il ne réécute pas le script, et IE plante... Quant a Safari ca ne fonctionne pas du tout... Si vous avez une idée du pourquoi du comment, je suis preneur
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 13 juil. 2008 à 14:12
pas suivi...
tu veux afficher la progression ?
ne teste pas xhr.readyState == 4 alors, ça veut dire que c'est fini.
de toutes manières FF te "rend" le main entre deux, pas IE.
ou alors tu as un problème de cache ?
ajoute '?'+new Date() derrière l'url
SpoonS2K
Messages postés13Date d'inscriptionsamedi 12 juillet 2008StatutMembreDernière intervention17 juillet 2008 13 juil. 2008 à 16:54
En fait xhr.open lit un fichier texte qui est mis a jour toute les secondes, d'ou l'interet de if (percent!=100) { getstatus(); } . Dans mon fichier il ya la valeur percent et je veux que mon script tourne en boucle en relisant le fichier texte tant que percent n'est pas égal à 100
SpoonS2K
Messages postés13Date d'inscriptionsamedi 12 juillet 2008StatutMembreDernière intervention17 juillet 2008 13 juil. 2008 à 18:51
Donc j'ai mis if (percent!=100) { xhr.send(null);getstatus(); } et ca ne change rien, ou alors je comprends rien. Pire ca bloque aussi sous Firefox maintenant...
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 14 juil. 2008 à 11:28
>>J'essaie ta methode, mais a mon avis ca va rien donner
euh... essaye ce que je te montre tel quel, tu verras que ça baigne.
( recup.php est ridicule, et la paramètre passé avec ajax ! mais c'est pour le test )
tu avais déjà dis cela à propos de xhr.onreadystatechange,
et pourtant, c'est bien ce qu'il faut.
<hr /> Cordialement Bul [mon Site] [M'écrire]
SpoonS2K
Messages postés13Date d'inscriptionsamedi 12 juillet 2008StatutMembreDernière intervention17 juillet 2008 14 juil. 2008 à 11:33
Bon j'ai reussi... Mon script était bon, mais IE extremement lent dans le traitement... J'ai ajouté un timer a la fin de mon script et tout baigne maintenant :) (bon a part pour safari ou rien ne s'affiche du tout mais bon)
function getstatus() {
var idProgress = document.getElementById("clef").value;
var xhr = new XMLHttpRequest();
xhr.open('GET', 'progress.php?progress_key='+idProgress+'&'+new Date(), true);
xhr.onreadystatechange = function() { if(xhr.readyState 4 && xhr.status 200) {
var reponse=eval('('+xhr.responseText+')');
var b_up = Number(reponse.bytes_uploaded);
var b_tot = Number(reponse.bytes_total);
var percent = Math.ceil(b_up*100/b_tot);
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 14 juil. 2008 à 11:41
>>Mon script était bon,
probable
>>mais IE extremement lent dans le traitement.
probablement du à l'eval, qui, lui aussi probablement, doit être inutile,
surtout appelé en boucle !
<hr /> Cordialement Bul [mon Site] [M'écrire]
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 14 juil. 2008 à 12:00
json ou pas, ce que je veux dire, c'est que :
retourner du javascript depuis le serveur,
qu'il faut alors interpréter (eval) est généralement inutile.
"il suffit" de mettre le js dans la page qui appelle
et l'exécuter avec les paramètres qui conviennent.
<hr /> Cordialement Bul [mon Site] [M'écrire]