我想将myscript.php代码注入我的处理程序页面。以下是来源:
handler.php
var myArr = Array();
function myfunc(){
// some code
handleArray(myArr);
}
function handleArray(arr){
// some code
}
$("container").observe('click', function(evt){
new Ajax.Request('myscript.php', {
method:'get',
evalScripts: 'true',
onFailure: function(e){
console.log(e);
},
onSuccess: function(t){
$("container").update(t);
myfunc(arr);
}
});
});
myscript.php
<script type="text/javascript">
var myArr = Array("hello", "world");
</script>
<div id="abc">some html code</html>
基本上我在我的处理程序页面中定义了我的函数,myscript.php保存了处理程序页面所需的数据。虽然上面确实向myscript.php发出了Ajax请求,但是返回的代码没有得到评估。它显示为Object Object而不是将其视为html。我将相同的代码移植到jQuery并设置datatype:"Script"
,一切正常。虽然切换到jQuery不是我的选择,因为整个代码库都建立在原型之上,我很想知道如何将原型作为脚本处理返回的页面。
我注意到有一个类似的线程Prototype Ajax.Updater Eval Javascript Functions表示将函数包装为匿名函数并打开evalJS标志将解决问题,它似乎不是我的情况下的解决方法因为我有几个变量和函数声明,我不知道如何使所有这些匿名。如果您需要更多信息,我们将非常感谢您的帮助,并告诉我们。
答案 0 :(得分:0)
评估的脚本块将在Ajax函数的范围内处理,因此......
var myArr = Array("hello", "world");
仅成为该函数中的局部变量。它不可用,稍后丢弃。使返回的脚本(myscript.php)更新为全局myArr
。
myArr = Array("hello", "world");