2010-12-02 99 views
0

我想将myscript.php代码注入到我的处理程序页面。这里是源:原型Ajax.Updater评估Javascript函数和HTML

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>

基本上我已经在我的定义HANDL我的功能er页面,而myscript.php则包含处理页面处理的必要数据。虽然上面确实向myscript.php发出了一个Ajax请求,但是返回的代码没有得到评估。它显示为对象对象而不是将其视为html。我将相同的代码移植到jQuery并设置datatype:"Script",一切正常。虽然切换到jQuery不是我的选择,因为整个代码库都是基于原型构建的,所以我很想知道如何通过原型将返回的页面当作脚本来处理。

我注意到有一个类似的线程Prototype Ajax.Updater Eval Javascript Functions说包装作为匿名函数的功能,并打开evalJS标志将解决问题,它似乎不是一个解决方案在我的情况下,因为我有几个变量和函数宣布,我不知道如何使他们全部匿名。任何帮助将不胜感激,让我知道如果你需要更多的信息。

回答

0

的评价脚本块将在的Ajax函数的范围进行处理,所以...

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

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

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

嗯,在我的情况下,因为变量已经是全局变量,所以把变量var是可选的。进行此更改并不能解决问题。 – 2010-12-03 21:09:45