原型Ajax.Updater Eval Javascript函数和HTML

时间:2010-12-02 23:28:57

标签: php javascript prototypejs

我想将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标志将解决问题,它似乎不是我的情况下的解决方法因为我有几个变量和函数声明,我不知道如何使所有这些匿名。如果您需要更多信息,我们将非常感谢您的帮助,并告诉我们。

1 个答案:

答案 0 :(得分:0)

评估的脚本块将在Ajax函数的范围内处理,因此......

var myArr = Array("hello", "world");

仅成为该函数中的局部变量。它不可用,稍后丢弃。使返回的脚本(myscript.php)更新为全局myArr

myArr = Array("hello", "world");