|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Ajax et IE6 [ Javascript et ActiveX / ActiveX ] (saib)
Informations & options pour cette discussion
|
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é dans : xml, row, datedebut, httprequest, if
Répondre à ce message
Sujets en rapport avec ce message
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
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,
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
|
Téléchargements
Logiciels à télécharger sur le même thème :
|