Ajax.Request显然没有评估JS代码

时间:2010-08-06 23:21:47

标签: ajax request prototypejs

我正在创建一个报告,报告参数的界面和报告本身都是由完全相同的php文件创建的。

这是创建报告时调用的文件部分的第一行:

<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,但我无法理解哪一个......

有人熟悉这个吗?

1 个答案:

答案 0 :(得分:0)

根据Prototype文档

“如果ajax请求遵循同源策略,并且它的响应具有与JavaScript相关的内容类型,则responseText属性的内容将自动传递给eval”

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

将另一方的Content-Type设置为以下之一:

  • 应用/ ECMAScript的
  • 应用/ JavaScript的
  • 应用程序/ x-的ECMAScript
  • 应用程序/ x-JavaScript的
  • 文本/ ECMAScript的
  • 文本/ JavaScript的
  • 文本/ X-的ECMAScript
  • 文本/ X-JavaScript的

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

注意:添加了其他选项evalJS: 'force'