Problème d'exécution JS dans retour ajax

Résolu
fabulofr Messages postés 116 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 8 novembre 2011 - 28 mai 2010 à 16:27
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 28 mai 2010 à 22:14
Bonjour à tous :)

J'ai un p'tit sushi :D euh.. souci lol ^^

Je fais une requête ajax sur mon serveur bref je vous passe les détails du code ajax...

Le serveur me renvoi du javascript que je dois exécuter coté client et du html.
Le code renvoyé est sous la forme:
html
....
javascript
....
html
....
javascript
....
html
....
javascript


etc...

La réponse ajax est mise dans une balise
repéré par la variable 'target' dans mon code js
Bref, dans mon code js, pour exécuter l'ajax:

var div = document.getElementById(target);
div.innerHTML = xhr.responseText;
var x = document.getElementsByTagName("SCRIPT");
for(var i=0;i<x.length;i++) {
window.eval(x[i].text);
}

Ce qui fonctionne impeccablement bien sous FF, mais très peu sous IE, en effet, seul la dernière balise <script> est exécutée.

J'ai donc modifié mon code comme suit:
var div = document.getElementById(target);
div.innerHTML = xhr.responseText;
var x = document.getElementsByTagName("SCRIPT");
alert('Nombre de <SCRIPT> trouvés: ' + x.length);
for(var i=0;i<x.length;i++) {
//window.eval(x[i].text);
}


Sous Firefox: 3 balises scripts trouvées, sous IE: 1 seule.
Et ceci, peu importe le nombre de balises se trouvant dans la page, IE n'en trouve toujours qu'une seule, et c'est la dernière de la page chargée par ajax.

Une idée du pourquoi ? Et comment corriger le bordel ?

(Vive IE -_-' mais que j'en ai ma claque de ce navigateur ...)

Thanks all ;)

8 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
28 mai 2010 à 18:55
je te livre ce à quoi j'avais abouti
//------------------------
function Get_Script( txt_){
  var szScript = "<script[^>]*>([\\S\\s]*?)<\/script>";
  var szReg    = new RegExp( szScript, 'img');
  //-- Recup des scripts avec balises
  var O_Script = txt_.match( szReg);
  if( O_Script){
    var szJs = "";
    for(var i = 0; i < O_Script.length; i++){
      szReg = new RegExp( szScript, 'im');
      //-- Recup le contenu des scripts      
      szJs += O_Script[i].match( szReg)[1];
    }
    try{
      eval( szJs);
    }catch(e){}
  }
}
et l'appel était des plus simple
Get_Script( XML_Http.responseText);

je ne pense pas que tu ai besoin de bien plus d'explication soit nécessaire...

;O)
3
fabulofr Messages postés 116 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 8 novembre 2011 1
28 mai 2010 à 16:33
Pardon, remplacez les lignes
var x = document.getElementsByTagName("SCRIPT");
par
var x = div.getElementsByTagName("SCRIPT");
0
fabulofr Messages postés 116 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 8 novembre 2011 1
28 mai 2010 à 16:43
Test fait:
Ma source PHP:
********************************************************








<script type="text/javascript">
alert('prout');
</script>
<script type="text/javascript">
alert('exec');
</script>


********************************************************

Un alert(document.getElementById(target).innerHTML);

Sous FF => me sort tout => ok
Sous IE =>
********************************************************










********************************************************


Là j'avoue que j'y capte que dalle ...
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
28 mai 2010 à 18:03
Bonjour,
j'ai constaté en son temps qu'il y avait effectivement des différences de traitement de la part des navigateurs en ce qui concerne également la prise en compte des SCRIPTs avec la méthode AJAX.

IE et SAFARI ne fonctionnant pas comme FireFox et Opéra.

Il te faut récupérer les parties de script à partir de la responseText et non pas avec getElementsByTagName.

;O)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fabulofr Messages postés 116 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 8 novembre 2011 1
28 mai 2010 à 18:14
Effectivement, un alert responsetext affiche bien le js. Merci du tuyau.

Mais comment les traiter dans ce cas là ?
0
fabulofr Messages postés 116 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 8 novembre 2011 1
28 mai 2010 à 19:15
Effectivement, à vue de nez ça devrait le faire ^^
Je teste ça de suite :) merci :D
0
fabulofr Messages postés 116 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 8 novembre 2011 1
28 mai 2010 à 20:30
Moyennant quelques adaptations, ça marche :D
Merci du coup de pouce ;)
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
28 mai 2010 à 22:14
Moyennant quelques adaptations...
il peut être intéressant, pour tous, de connaître ces adaptations.

;O)
0
Rejoignez-nous