Problème d'exécution de <SCRIPT></SCRIPT> lors d'appel en mode AJAX [Résolu]

Signaler
Messages postés
4
Date d'inscription
samedi 29 septembre 2007
Statut
Membre
Dernière intervention
10 novembre 2008
-
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
-
Bonjour, ça fait deux jours que je cherche et je n'ai toujours pas trouvé. 

Voici mon problème.  J'ai une page
http://www.espaceglobal.com/montest/traiteTest.php
voici le code de traiteTest.php
<HTML><HEAD><HEAD>

<form>
   <script >alert("Calendrier OK")</script>
</form>

</HTML>

Quand j'execute directement http://www.espaceglobal.com/montest/traiteTest.php, mon script <script >alert("Calendrier OK")</script> fonctionne bien

Mon problème se situe lors des appels AJAX.
J'ai une page http://www.espaceglobal.com/montest/test.php qui affiche un bouton pour executer la page traiteTest.php. Mais quand je clic sur mon bouton, rien ne se passe.  Comme si le <script >alert("Calendrier OK")</script> n'était pas pris en compte.
Voici le code de test.php


<HTML><HEAD>
<script type="text/javascript" src="calendarDateInput.js">


/***********************************************
* Jason's Date Input Calendar- By Jason Moon http://calendar.moonscript.com/dateinput.cfm
* Script featured on and available at http://www.dynamicdrive.com
* Keep this notice intact for use.
***********************************************/


</script>
<script language="javascript" type="text/javascript">
function TraiterCalendrier(){
 var ajaxRequest;  // The variable that makes Ajax possible!
 
 evalScripts:true
 try{
  // Opera 8.0+, Firefox, Safari
  ajaxRequest = new XMLHttpRequest();
 } catch (e){
  // Internet Explorer Browsers
  try{
   ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
   try{
    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
   } catch (e){
    // Something went wrong
    alert("Your browser broke!");
    return false;
   }
  }
 }




 // Create a function that will receive data sent from the server
 ajaxRequest.onreadystatechange = function(){
  if(ajaxRequest.readyState == 4){
   
   var ajaxDisplay = document.getElementById('ajaxZoneCalendrier');
   ajaxDisplay.innerHTML = ajaxRequest.responseText;
  
  }
 }
 
 ajaxRequest.open("POST", "traiteTest.php?nocache=" + Math.random(),  true);


    ajaxRequest.send(null);


}
</script>


<HEAD>

<form>



</form>

</HTML>



 

Si quelqu'un pouvait m'aider à ce sujet, j'en serait vraiment heureux.  Car pour le moment, je suis bloqué. 

9 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
mise en page déplorable;.. navré.

  1ère approche : ajax retourne une page html avec du javascript

  demo.htm    
<html>

  

      demo.htm

     

      <script>

         var xml = new XMLHttpRequest();

         xml.open("get","demo.php", false);

         xml.send("");

         var d=document.getElementById("txt");

         d.innerHTML=xml.responseText;

         eval(d.getElementsByTagName('script')[0].text);

      </script>  

  

</html>

    demo.php
<html>

  

      <script type ='text/javascript'>

         alert("demo");

      </script>

      <?php echo Date('l j F Y');   ?>

  

</html>

         

2ème approche : ajax retourne uniquement des données

  demo.htm    
<html>

  

      demo.htm

     

      <script>

         function appel()

         {   alert("demo");   }

         var xml = new XMLHttpRequest();

         xml.open("get","demo.php", false);

         xml.send("");

         document.getElementById("txt").innerHTML=xml.responseText;

         appel();

      </script>  

  

</html>

  demo.php   
<?php echo Date('l j F Y');   ?>

exemple stupide, en synchrone.

          Bul [mon Site] [M'écrire]         
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
bonjour,
t'as pas du chercher bien longtemps !
problème récurent !
avec ajax, le javascript renvoyé n'est pas interprété,
il faut que tu les fasses "manuellement" !
on en causait il n'y a pas très longtemps ici-même,
quand à l'opportunité de faire de genre de chose, je ne vais
        pas une nouvelle fois tenter de convaincre que ce n'est
        pas une bonne approche, car c'est quasi toujours inutile
        ( à mon avis ) de rapatrier du javascript.
Cordialement          Bul [mon Site] [M'écrire]       
Messages postés
4
Date d'inscription
samedi 29 septembre 2007
Statut
Membre
Dernière intervention
10 novembre 2008

Je comprend ton point.  Cependant l'application que je suis entrain de faire est plus compliqué que mon exemple.  L'exemple plus haut n'était que pour simplifier mon code et pour permettre à vous tous de m'aider.

À vrai dire, ce que je veux afficher dans <SCRIPT></SCRIPT> c'est du code qui me permet d'afficher un calendrier popup piker.  J'ai récupéré ce code. Cependant pour que le calendrier fonctionne, l'appel de la function ce fait comme ceci


<ol>
<li><script>DateInput('orderdate', true, 'DD-MON-YYYY')</script></li>
</ol>




<script type="text/javascript" src="calendarDateInput.js">


/***********************************************
* Jason's Date Input Calendar- By Jason Moon http://calendar.moonscript.com/dateinput.cfm
* Script featured on and available at http://www.dynamicdrive.com
* Keep this notice intact for use.
***********************************************/


</script>
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
et bien ? met cette fonction DateInput dans ta page appelante
tu n'auras plus le souci.
sinon, tu sembles utiliser un framework ?
il contient tout ce qu'il faut pour faire exécuté du js chargé avec ajax
   ( même si je pense que c'est inutile )
          Bul [mon Site] [M'écrire]         
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
et quelques messages avant le tien
une ch'tiote discussion à ce propos ici

          Bul [mon Site] [M'écrire]         
                Membre du CCC~0
Messages postés
4
Date d'inscription
samedi 29 septembre 2007
Statut
Membre
Dernière intervention
10 novembre 2008

Bon, j'ai lu l'ensemble des trucs, puis j'ai essayé tout et ça ne fonctionne pas.

Ça m'embête car la fonction
 
function evalScript(string){
    var allScripts = new RegExp('<script[^>]*>([\\S\\s]*?)<\/script>', 'img');
    var oneScript = new RegExp('<script[^>]*>([\\S\\s]*?)<\/script>', 'im');
    var tabScripts = string.match(allScripts) || [];
    for(var i = 0; i < tabScripts.length; i++){
       
  eval(tabScripts[i]);
    }
}

plante toujours sur cette ligne eval(tabScripts[i]);

En tout cas, merci quand même, je vais faire mon application autrement. sans ajax. 
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
1ère approche : ajax retourne une page html avec du javascript |

----

demo.htm |
demo.php |

----

<html>

demo.htm

<script>
var xml = new XMLHttpRequest();
xml.open("get","demo.php", false);
xml.send("");
var d=document.getElementById("txt");
d.innerHTML=xml.responseText;
eval(d.getElementsByTagName('script')[0].text);
</script>

</html>,

<html>

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

<?php echo Date('l j F Y'); ?>

</html>,

----

2ème approche : ajax retourne uniquement des données |

----

<html>

demo.htm

<script>
function appel()
{ alert("demo"); }
var xml = new XMLHttpRequest();
xml.open("get","demo.php", false);
xml.send("");
document.getElementById("txt").innerHTML=xml.responseText;
appel();
</script>

</html>,
<?php echo Date('l j F Y'); ?>





Cordialement


          Bul [mon Site] [M'écrire]         
Messages postés
4
Date d'inscription
samedi 29 septembre 2007
Statut
Membre
Dernière intervention
10 novembre 2008

Merci, j'ai finalement réussi avec ce que tu viens de me donner.

J'ai réussis d'afficher le bouton pour le calendrier, mais maintenant mon problème c'est qu'il ne fonctionne pas.

Bien merci beaucoup, j'ai compris maintenant comment fonctionne la fonction eval()

Je vais tout de même éviter de l'utiliser.  De plus, je vais concentrer le Ajax sur des traitements particulié et non pas faire tout en Ajax.

Merci encore pour ton aide
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
>>j'ai compris maintenant comment fonctionne la fonction eval()
nickel
s'il y avait plusieurs <script>, il faudrait faire une ch'tiote boucle
et on peut, bien entendu, faire autrement ( et mieux ! )

>>Je
vais tout de même éviter de l'utiliser. 
>>De plus, je vais concentrer le
Ajax sur des traitements particulié et non pas faire tout en Ajax.
sage décision... si je puis me permettre
ajax c'est fabuleux,  encore faut-il l'utiliser pour ce quoi il est fait,
       c'est comme tout.

Cordialement

          Bul [mon Site] [M'écrire]