2010-08-06 76 views
0

我正在创建一个报告,报告参数的界面和报告本身都是由完全相同的php文件创建的。Ajax.Request显然不评估JS代码

这被称为文件的部分的第一线正在创建报表时:

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

每当我使用此代码抠报告

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 
         } 
        } 
       ) 

一切完美和我的所有JS代码都会在页面打开后立即进行评估,但警报会显示“bla”,但如果我使用此代码:

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 }); 
         } 
        } 
       ) 

甚至没有显示出丝毫的JS活动量。我可能会以错误的方式使用Ajax.Request,但我不明白哪一个...

是否有人对此有所了解?

回答

0

根据原型文档

“如果一个Ajax请求如下同源策略,它的反应是一个JavaScript相关的内容类型,responseText属性的内容会自动传递给eval”

在这种情况下,您有两种选择。

在另一侧

集内容类型为下列之一:

  • 应用/ ECMAScript的
  • 应用/ JavaScript的
  • 应用程序/ x-的ECMAScript
  • 应用程序/ x-的JavaScript
  • text/ecmascript
  • text/javascript
  • 文/ X-的ECMAScript
  • 文/ X的JavaScript

,或者强制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 }); 
     } 
    }); 

注意:附加选项加入evalJS: 'force'

+0

这两个选项需要一个单独的请求只是为了JS,不是吗? 任何想法为什么我的代码与Ajax.Updater,但与Ajax.Request没有好? – Ferfish 2010-08-09 12:35:23

+0

没有额外的要求来评估JS – 2010-08-09 13:45:50

+0

Ooops,我的坏,我没有看到evalJS选项设置...它的工作完美。我仍然不知道它为什么不autoEval我的JS代码。无论如何!谢谢! – Ferfish 2010-08-23 16:17:32