Accueil > Forum > > > > Ajax et IE6
Ajax et IE6
mercredi 17 septembre 2008 à 01:52:28 |
Ajax et IE6

saib
|
Bonjour, Voila, j'ai un problème assez étrange avec IE6 en utilisant le XMLHttpRequest : au bout de quelques appels, il ne réagit plus... jusqu'a ce qu'il tombe en timeout, et ensuite, ca refonctionne! Le probleme ne provient pas du serveur apache (easyPHP en local), car pendant que ca pédale dans la semoule, ca fonctionne tres bien sous FireFox... J'ai fait des tests (sur une autre machine) sous IE7, et la, pas de probleme. Jamais eu de probleme non plus avec FF. Les symptômes : * Un ou plusieurs appels ajax se passent tres bien * A un moment donné (je n'ai pas pu constater de "nombre d'appels critique", des fois c'est au 2eme, des fois au 15eme...), le raffraichissement de la page ne se termine pas (des images de se chargent pas, alors que les memes sont affichées un peu au dessus dans un tableau (liens modifier/supprimer)... en toute logique avec la mise en cache elles devraient etre affichées non?), et tous les appels ajax suivants ne donnent plus rien. Parfois ca va jusqu'au figeage de la page (plus aucun des éléments de la page ne répond, le curseur ne change pas en passant sur les zones de saisie ou les liens, impossible de scroller, mais le menu de IE répond bien, il est possible de fermer IE), et parfois meme jusqu'au figeage complet de IE (assez rare quand meme) * Je recoit un timeout pour chaque appel ajax qui a foiré (status 12002, apres une dizaine de minutes) * Les appels ajax fonctionnent de nouveau correctement... jusqu'au prochain "plantage"
Un peu de code :
Fonction effectuant l'appel ajax :
var httpRequest = false; //variable globale pour économiser la mémoire (aussi testée en local, meme probleme) function makeRequest(url, param, async) { if (!httpRequest) { if (window.XMLHttpRequest) // Mozilla, Safari,... { httpRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) // IE { try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } } if (!httpRequest) { alert('Abandon : Impossible de créer une instance XMLHTTP'); return false; } httpRequest.open('POST', url, async); // tous les appels a cette fonction se font avec async = true. J'ai aussi testé en synchrone, meme probleme. Testé également avec une methode GET : meme probleme. httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); if (async == true) httpRequest.onreadystatechange = alertContents; //fonction callback. Essayé en la placant avant le open ou apres le send => idem. httpRequest.send(param);
if (async == false) alertContents(); return true; } Les appels a makeRequest se font sous cette forme : var DateDebut = document.getElementById("HeuresDateDebut").value; var DateFin = document.getElementById("HeuresDateFin").value; var Employeur = document.getElementById("CritereEmployeurINPUT").value; var Client = document.getElementById("CritereClientINPUT").value; var Projet = document.getElementById("CritereProjetINPUT").value; makeRequest('SendData.php', 'page=heures&op=select&DateDebut=' + DateDebut + '&DateFin=' + DateFin + '&Employeur=' + Employeur + '&Client=' + Client + '&Projet=' + Projet + '&OrderBy=' + ColTri + '&Sens=' + SensTri, true); Fonction callback : function alertContents()// testé en passant le HXR en parametre quand déclaré en local dans la fonction précédente : meme probleme. { if (httpRequest.readyState == 4) { if (httpRequest.status == 200) { if (trim(httpRequest.responseText) != '') { if (httpRequest.responseXML != null) { TraiteReponseRequest(httpRequest.responseXML);// traitement des données xml (je met pas le code ici car beaucoup de choses, et a priori le probleme ne vient pas de la) } else { alert(httpRequest.responseText); } } else { alert('Un problème est survenu avec la requête (pas de réponse).'); } } else { alert('Un problème est survenu avec la requête (status:'+ httpRequest.statusText +').'); // on récupere un status 12002 ici quand le xhr se met a "délirer" sous IE6 } } } Génération du XML en php (simplifié car il y'a de nombreux cas de figure) : header('Content-Type: text/xml');
// Création de l'objet Xml $rep = new DOMDocument("1.0");
$Sens = ($_POST['Sens'] == 0)? 'ASC' : ' DESC'; $SQL = "SELECT RowID, DATE_FORMAT(DateDebut, '%d/%m/%Y') as DateDebut, DATE_FORMAT(DateFin, '%d/%m/%Y') as DateFin, NbreJours, NbreHeures, Employeur, Client, Projet, Remarques, MontantBrut, MontantNet, ContratRecu, FeuilletAssedic FROM heures WHERE UId = '$UID' AND DateDebut >= str_to_date('".$_POST['DateDebut']."', '%d/%m/%Y') AND DateDebut <= str_to_date('".$_POST['DateFin']."', '%d/%m/%Y') AND LOWER(Employeur) LIKE '".strtolower($_POST['Employeur']) ."%' AND LOWER(Client) LIKE '".strtolower($_POST['Client']) ."%' AND LOWER(Projet) LIKE '".strtolower($_POST['Projet']) ."%' ORDER BY ".$_POST['OrderBy']." ".$Sens; if ($Result = mysql_query($SQL)) { $RowNum = -1; $xml ="<resultset>\n"; $xml .="\t<header>\n"; $xml .="\t\t<resultat>OK</resultat>\n"; $xml .="\t\t<page>heures</page>\n"; $xml .="\t\t<op>select</op>\n"; $xml .="\t</header>\n"; $xml .="\t<dataset>\n"; while ($Row = mysql_fetch_row($Result)) { $RowNum = $RowNum + 1; $RowId = $Row[0]; $DateDebut = utf8_encode(htmlspecialchars(($Row[1] == '') ? ' ' : htmlentities($Row[1], ENT_QUOTES))); $DateFin = utf8_encode(htmlspecialchars(($Row[2] == '') ? ' ' : htmlentities($Row[2], ENT_QUOTES))); $NbreJours = utf8_encode(htmlspecialchars(($Row[3] == '') ? ' ' : htmlentities($Row[3], ENT_QUOTES))); $NbreHeures = utf8_encode(htmlspecialchars(($Row[4] == '') ? ' ' : htmlentities($Row[4], ENT_QUOTES))); $Employeur = utf8_encode(htmlspecialchars(($Row[5] == '') ? ' ' : htmlentities($Row[5], ENT_QUOTES))); $Client = utf8_encode(htmlspecialchars(($Row[6] == '') ? ' ' : htmlentities($Row[6], ENT_QUOTES))); $Projet = utf8_encode(htmlspecialchars(($Row[7] == '') ? ' ' : htmlentities($Row[7], ENT_QUOTES))); $Remarques = utf8_encode(htmlspecialchars(($Row[8] == '') ? ' ' : htmlentities($Row[8], ENT_QUOTES))); $MontantBrut = utf8_encode(htmlspecialchars(($Row[9] == '') ? ' ' : htmlentities($Row[9], ENT_QUOTES))); $MontantNet = utf8_encode(htmlspecialchars(($Row[10] == '') ? ' ' : htmlentities($Row[10], ENT_QUOTES))); $ContratRecu = $Row[11]; $FeuilletAssedic = $Row[12]; $xml .="\t\t<data>\n"; $xml .="\t\t\t<index>".$RowNum."</index>\n"; $xml .="\t\t\t<RowId>".$RowId."</RowId>\n"; $xml .="\t\t\t<DateDebut>".$DateDebut."</DateDebut>\n"; $xml .="\t\t\t<DateFin>".$DateFin."</DateFin>\n"; $xml .="\t\t\t<NbreJours>".$NbreJours."</NbreJours>\n"; $xml .="\t\t\t<NbreHeures>".$NbreHeures."</NbreHeures>\n"; $xml .="\t\t\t<Employeur>".$Employeur."</Employeur>\n"; $xml .="\t\t\t<Client>".$Client."</Client>\n"; $xml .="\t\t\t<Projet>".$Projet."</Projet>\n"; $xml .="\t\t\t<Remarques>".$Remarques."</Remarques>\n"; $xml .="\t\t\t<MontantBrut>".$MontantBrut."</MontantBrut>\n"; $xml .="\t\t\t<MontantNet>".$MontantNet."</MontantNet>\n"; $xml .="\t\t\t<ContratRecu>".$ContratRecu."</ContratRecu>\n"; $xml .="\t\t\t<FeuilletAssedic>".$FeuilletAssedic."</FeuilletAssedic>\n"; $xml .="\t\t</data>\n"; } $xml .="\t</dataset>\n"; $xml .="</resultset>"; } else { $xml ="<resultset>\n"; $xml .="\t<header>\n"; $xml .="\t\t<resultat>KO</resultat>\n"; $xml .="\t\t<page>heures</page>\n"; $xml .="\t\t<op>select</op>\n"; $xml .="\t</header>\n"; $xml .="\t<dataset>\n"; $xml .="\t\t<data>\n"; $xml .="\t\t\t<erreur>Erreur lors de la recherche des données : " .mysql_error()."</erreur>\n"; $xml .="\t\t</data>\n"; $xml .="\t</dataset>\n"; $xml .="</resultset>"; }
// Envoie des données xml if ($rep->loadXML($xml)) { echo $rep->saveXML(); } Ca fait 3 jours que je farfouille sur le net en long en large et en travers, et j'ai toujours pas trouvé de solution a ce probleme...
Voila, faites moi savoir si il vous faut plus d'infos, je vous met ca des que possible ^^
Merci d'avance, Seb
|
|
mercredi 17 septembre 2008 à 08:43:40 |
Re : Ajax et IE6

bultez
|
bonjour, tu es sûr que pour "récupérer" du xml ( fut-il créé par php ) il faut employer ajax ? j'utilise toujours, pour un fichier xml ( mais jamais utilisé avec création de ce xml par php, alors je dis peut-être n'importe quuoi !?! ) : function xmlFin() // Xml chargé { traitement du xml } if ( document.implementation && document.implementation.createDocument ) { xmlD = document.implementation.createDocument("", "", null); xmlD.onload = function() { xmlFin(); } } else { xmlD = new ActiveXObject("Microsoft.XMLDOM"); xmlD.onreadystatechange = function () { if (xmlD.readyState == 4) xmlFin(); } } xmlD.load("fichier.xml");
|
|
mercredi 17 septembre 2008 à 12:32:28 |
Re : Ajax et IE6

saib
|
Salut, et merci de ta participation! C'est, me semble-t'il, le principe de base d'AJAX : Asynchronous Javascript And XML... Ou alors j'ai loupé un truc quelque part  La propriété responseXML permet justement de récuperer le xml (généré dynamiquement par PHP ou non, et pour autant qu'il s'agisse de xml valide) sous forme d'objet DOM pour le traiter en js, donc l'idée de réinventer la poudre en réécrivant une fonction de chargement de document XML ne m'est meme pas venue a l'esprit en fait... Ceci dit ca pourrait etre une piste interessante pour ne pas passer par un XHR : charger un doc xml qui se génère tout seul a la demande grace a PHP... Cependant ca perd (je pense) les principaux avantages d'ajax : traitement asynchrone coté serveur si le traitement est potentiellement long, ce qui permet de ne pas figer le client le temps du traitement; passage de parametres pour pouvoir filtrer les données a recuperer et ne transferer entre le serveur et le client que le necessaire, plutot que "convertir" la base de données complete en xml, la transmettre au client, et effectuer la recherche dedans... Après, je sais qu'il est possible d'utiliser le XHR autrement qu'avec du XML : le JSON (envoi de donnée js structurées plutot que de xml), ou envoi de HTML préconstruit par le serveur... Le JSON, je maitrise pas du tout, je connait pas bien, et je trouve que ca perd quand meme l'interet de l'interoperabilité (la page php renvoyant les données ne peut etre appelée QUE par du js, ou alors il faut redécortiquer la réponse pour reconstruire une structure de données... bof bof...), quant au HTML préconstruit... beurk! Que fait-t'on de la séparation des roles?? le serveur est la pour faire du traitement de données, pas de la mise en page ou de l'affichage! Donc en conclusion, ajax et xml généré par php me parait toujours la meilleurs solution  Seb
|
|
mercredi 17 septembre 2008 à 13:52:10 |
Re : Ajax et IE6

bultez
|
on est bien d'accord... mais j'eus quelques soucis en n'utilisant pas ce que j'utilise, je n'ai plus IE6, peut-être est-ce que ça vaut le coup de tester malgré tout, et sans convertir la base complète ! sans fichier nulle part.... non,non : simplement en laissant tel quel coté php. malgré tout.. un extrait d'une base de données, la convertir en xml... je doute. php devrait renvoyer des données, et pas une page complète bien sûr ! c'est le but d'ajax... me semble-t-il.
|
|
mercredi 17 septembre 2008 à 20:41:00 |
Re : Ajax et IE6

nickadele
|
bonjour ou bonsoir, je me demande si ton problème ne viendrait pas de cette ligne : httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');J'ai déjà utilisé ajax avec du xml et j'ai jamais du définir le header pour ce type de requète ! Si tu veux je peux te fournir la librairie que j'utilise avec les fichiers xml. Nickadele ---------------------------------------------- non, ma belle ne s'appel pas Adèle Mon Blog
|
|
jeudi 18 septembre 2008 à 01:06:09 |
Re : Ajax et IE6

saib
|
Oups mon message a été langé en route, je m'en était pas appercu  Je disait donc : Bul : Je vais faire quelques tests dans ce sens, mais je ne pense pas pouvoir utiliser la méthode POST pour transmettre des données a PHP avec un XMLDOM (meme un GET dans l'URL du load je suis pas sur que ca marche bien...), hors j'ai réellement besoin de la méthode POST pour la sauvegarde de données saisies par l'utilisateur (champ commentaire notament), car la taille maxi des parametres que l'on peut passer en GET risque d'etre trop faible... Toutefois si la méthode GET fonctionne bien, je m'orienterait peut etre vers une solution mixte XMLDOM/ajax en utilisant AJAX uniquement pour la sauvegarde (et en croisant les doigts pour que ca merde pas...), toutefois, je préfererait quand meme n'utiliser que de l'ajax et trouver une solution a ce probleme... Nick: Cette ligne est necessaire pour l'utilisation de la méthode POST avec XMLHttpRequest, et je l'avait mise en commentaire quand j'avait tester la methode GET, sans plus de succes... Ce n'est donc pas elle la responsable!  Merci, Seb
|
|
jeudi 18 septembre 2008 à 01:16:40 |
Re : Ajax et IE6

saib
|
(Je comprend pas ce qui se passe, ca me bouffe mes messages, il n'y a que la signature qui est inserée... Si un modérateur passe par la, s'il peut faire un peu de ménage... Merci a lui, et désolé pour ce bazard ^^') Seb
|
|
jeudi 18 septembre 2008 à 12:07:35 |
Re : Ajax et IE6

mnouzahir
|
je crois que ton problème viens des \n et \t que tu ajout dans le fichier php;
j'avais le même problème hier et la cause été les \n
bonne chance 
|
|
jeudi 18 septembre 2008 à 12:42:05 |
Re : Ajax et IE6
|
jeudi 18 septembre 2008 à 13:22:26 |
Re : Ajax et IE6

saib
|
mnouzahir : Concernant les /t et /n, il ne s'agit que de formattage du xml (tabulations et retours chariot), normalement, ca ne devrait pas poser de probleme, et pour autant que je sache c'est tout a fait authorisé, mais soit, je testerait ce soir (je n'ai pas IE6 au taf mais IE7, qui lui ne pose aucun probleme)... nick : J'ai essayé de virer le header 'application/x-www-form-urlencoded' en conservant la méthode POST, et comme je m'y attendait, ca ne fonctionne pas (aucune réponse, que ce soit sous IE7 ou FF). Je veut bien tester ta librairie, mais si elle n'utilise pas ce header je doute qu'elle soit capable de gerer du POST, a moins qu'on ne puisse définir le header dans les options de l'objet, comme j'ai pu le voir dans quelques méthodes par prototypage... Toujours est-il que si ca fonctionne avec, ca m'arrangerait bien quand meme :-) Seb
|
|
Cette discussion est classée dans : xml, row, datedebut, httprequest, if
Répondre à ce message
Sujets en rapport avec ce message
Affectation d'un fonction pour un evenement pour IE et FF? [ par dudulebzh35 ]
Bonjour a tous,J'ai une liste avec le nom de fichiers et de repertoires (dans une table). Lorsque je clique sur un repertoire, je vois ses fichiers,
Problème actualisation auto Ajax [ par misterdod ]
Bonsoir,bon j'ai un souci, je souhaiterais qu'une div de ma page affiche un message suivant une donnée précise dans une table sql.J'utilise setInterva
Problème de Refresh [ par nabmoah ]
Salutj'ai trouvé ce bout de code sur ce forum et j'ai essayé de le faire marché mais sans succès.le problème c'est que la page m'affiche toutes les 2
mettr a jour svg avec xml httprequest [ par oussamatique ]
oussama bsr tout le mondej'ai créé une carte dynamyque sous svg maintenant je veux utilisé la technologé ajax en plus précis le xml h
Ajax - Impossible d'appeler ma page [ par darude94 ]
Bonjour,Voici mon soucis, en cliquant sur le lien supprimer je voudrais supprimer l'element sans rafraichir le probleme et que je ne parviens pas jusq
Console d'erreurs : Mal formé [ par Tilix ]
Bonjour, J'ai un petit problème. J'execute mes scripts grâce à de l'AJAX et la fonction eval();, mais la console d'erreurs m'affiche des problèmes alo
readystate qui reste à 1 [ par jpclutier ]
Bonjour à tous,J'ai fait un peu d'ajax qui me permet de récupérer des data dans une BdD. Avec FireFox tout fonctionne correctement mais avec IE7 le re
Récuperation pour passage AJAX d'une valeur d'un radiobutton [ par whiteange ]
Bonjour,J'ai un petit problème avec la récuperation de la valeur d'un radio bouton :J'ai le formulaire suivant :<form method="post" onsubmit="inscript
problème javascript - XML [ par iraho ]
Bonjour, j'ai un souci avec pour faire du xml dynamique avec javascript et j'aurais besoin d'aide. En fait, j'ai code associant xml, xslt et javascrip
encore une fonction qui marche pas ! [ par nicomilville ]
Salut,J'ai encore un problème avec une fonction qui ne marche pas !ma fonction :function aff_discution() { var xhr_object = null; if(window.XMLHttpRe
Livres en rapport
|
Derniers Blogs
WP7 5K BELGIUM CHALLENGEWP7 5K BELGIUM CHALLENGE par junarnoalg
Microsoft Belgique a le plaisir de vous annoncer le lancement du
Challenge Windows Phone 7
. Celui-ci se déroule du 12 juillet au 30 novembre 2010 et vous donne l'opportunit...
Cliquez pour lire la suite de l'article par junarnoalg LES MONADES POUR LES NULSLES MONADES POUR LES NULS par mdufourneaudravel
Avec l'annonce de F#, je me suis intéressé de plus en plus à la programmation fonctionnelle, je suis donc rapidement tombé sur les " monades ", mais malgré la lecture de plusieurs articles, j'étais resté perméable à leur concept. C'est désormais fini, grâ...
Cliquez pour lire la suite de l'article par mdufourneaudravel [WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7[WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7 par Audrey
L'émulateur Windows Phone 7, fourni avec la version Beta des outils développeurs n'inclut aucune image dans sa bibliothèque. Pas très pratique de tester son application lorsque l'on souhaite que l'utilisateur puisse choisir une image présente dans le télé...
Cliquez pour lire la suite de l'article par Audrey VIVE LES MOCKS ET LES POCOSVIVE LES MOCKS ET LES POCOS par vLabz
J'observe régulièrement autour de moi de la confusion à propos de ces deux termes et j'aimerais juste rappeler ce qu'ils signifient. Je ne suis bien sûr pas le mieux placé pour faire une leçon mais je vais faire de mon mieux pour mettre en valeur ce q...
Cliquez pour lire la suite de l'article par vLabz [WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5)[WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5) par JeremyJeanson
Vendredi dernier Microsoft a publié le quatrième épisode des bonnes pratiques pour coder ses activités custom dans WF4 : endpoint.tv - Workflow and Custom Activities - Best Practices (Part 4) . Tout comme pour les précédents épisodes, j'ai pris le temps d...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Crystal Report (11)CRYSTAL REPORT (11)Crystal Reports est un outil de reporting souple et puissant, vous pouvez très facilement consult... Cliquez pour télécharger Crystal Report Academy System (12.0.2.0)ACADEMY SYSTEM (12.0.2.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft iPod Vidéo Convertisseur 6 (6.0.3.0419)XILISOFT IPOD VIDéO CONVERTISSEUR 6 (6.0.3.0419)Xilisoft iPod Vidéo Convertisseur est un outil puissant de conversion d'iPod, facile à utiliser. ... Cliquez pour télécharger Xilisoft iPod Vidéo Convertisseur 6 Xilisoft iPhone Vidéo Convertisseur 6 (6.0.3.0419)XILISOFT IPHONE VIDéO CONVERTISSEUR 6 (6.0.3.0419)Xilisoft iPhone Vidéo Convertisseur est le meilleur logiciel de conversion iPhone qui peut facile... Cliquez pour télécharger Xilisoft iPhone Vidéo Convertisseur 6 Xilisoft iPad Vidéo Convertisseur 6 (6.0.3.0419)XILISOFT IPAD VIDéO CONVERTISSEUR 6 (6.0.3.0419)Il s'agit d'un logiciel polyvalent pour convertir les formats vidéo/audio populaires en formats p... Cliquez pour télécharger Xilisoft iPad Vidéo Convertisseur 6
|