我正在创建一个报告,报告参数的界面和报告本身都是由完全相同的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,但我无法理解哪一个......
有人熟悉这个吗?
答案 0 :(得分:0)
根据Prototype文档
“如果ajax请求遵循同源策略,并且它的响应具有与JavaScript相关的内容类型,则responseText属性的内容将自动传递给eval”
在这种情况下,您有两个选择。
将另一方的Content-Type设置为以下之一:
或,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'