2010-08-06 5 views
0

Je crée un rapport, à la fois l'interface pour les paramètres du rapport et le rapport lui-même est créé par le même fichier php exact.Ajax.Request apparemment ne pas évaluer le code JS

Ce sont les premières lignes de la partie du fichier appelé lorsque le rapport est en cours de création:

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

Chaque fois que j'utiliser ce code pour tirer le rapport

new Ajax.Updater('reportarea','reportengines/<?=$configdata['filename']?>', 
        { 
         method: 'post', 
         parameters: { 
          action: 'executereport', 
          rep_projects: $('rep_projects').value, 
          rep_daterange: $('rep_daterange').value, 
          rep_daterangefws: $('rep_daterangefws').value, 
          rep_daterangemos: $('rep_daterangemos').value, 
          start_date: startdate, 
          end_date: enddate 
         } 
        } 
       ) 

tout fonctionne parfaitement et tout mon code JS est évalué de sorte que dès que la page s'ouvre, l'alerte arrive avec "bla", mais, si j'utilise ceci:

new Ajax.Request('reportengines/<?=$configdata['filename']?>', 
        { 
         method: 'post', 
         parameters: { 
          action: 'executereport', 
          rep_projects: $('rep_projects').value, 
          rep_daterange: $('rep_daterange').value, 
          rep_daterangefws: $('rep_daterangefws').value, 
          rep_daterangemos: $('rep_daterangemos').value, 
          start_date: startdate, 
          end_date: enddate 
         }, 
         onSuccess: function(transport) { 
          $('reportarea').innerHTML = transport.responseText; 
          Effect.BlindUp('reportoptions', { duration: 1.0 }); 
          Effect.BlindDown('reportarea', { duration: 1.0 }); 
         } 
        } 
       ) 

pas même la moindre quantité d'activité JS est montré. J'utilise peut-être l'Ajax.Request d'une mauvaise façon, mais je ne peux pas comprendre laquelle ...

Quelqu'un est-il familier avec cela?

Répondre

0

Selon la documentation du prototype

« Si une demande de paiement ajax suit la même politique d'origine et il réponse a un type de contenu lié JavaScript, le contenu de la propriété responseText sera transmis automatiquement à eval »

Dans ce cas, vous avez deux options.

Set Content-Type de l'autre côté à une des opérations suivantes:

  • application/ECMAScript
  • application/javascript
  • application/x-ECMAScript
  • application/x-javascript
  • text/ecmascript
  • text/javascript
  • text/x-ECMAScript
  • text/x-javascript

ou, évaluation force JS:

new Ajax.Request('reportengines/<?=$configdata['filename']?>', { 
     method: 'post', 
     evalJS: 'force', 
     parameters: { 
      action: 'executereport', 
      rep_projects: $('rep_projects').value, 
      rep_daterange: $('rep_daterange').value, 
      rep_daterangefws: $('rep_daterangefws').value, 
      rep_daterangemos: $('rep_daterangemos').value, 
      start_date: startdate, 
      end_date: enddate 
     }, 
     onSuccess: function(transport) { 
      $('reportarea').innerHTML = transport.responseText; 
      Effect.BlindUp('reportoptions', { duration: 1.0 }); 
     } 
    }); 

Avis: Option supplémentaire a été ajouté evalJS: 'force'

+0

ces deux options nécessiteraient une demande séparée juste pour le JS, n'est-ce pas? Toute idée de pourquoi mon code est bon avec Ajax.Updater mais pas avec Ajax.Request? – Ferfish

+0

Aucune demande supplémentaire n'est requise pour évaluer JS –

+0

Ooops, mon mauvais, je n'ai pas vu l'option evalJS définie ... cela a fonctionné parfaitement. Je ne sais toujours pas pourquoi cela ne fait pas l'autoEval mon code JS. En tout cas! Je vous remercie! – Ferfish