原型Ajax.Updater Eval Javascript函数

时间:2009-11-28 13:49:24

标签: javascript ajax prototypejs

我有这个示例页面:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Ajax Page</title>
<script type="text/javascript">
function ajax_hello() {
    alert ("hello");    
}
alert ("Hello from JS");
</script>
</head>

<body>
This is the Ajax page.
<a href='#' onclick='ajax_hello();'>Click here to fire off JS function</a>.
</body>
</html>

我称之为:

new Ajax.Updater($(element), page, { method: "get", evalScripts: true });

警报正在运行,但该函数未注册(ajax_hello())。

有没有办法让ajax将javascript函数注册到调用页面?

1 个答案:

答案 0 :(得分:5)

在回复评论时,我在documentation进行了调查,看起来在更新程序评估脚本时,Prototype有一些特殊规则。脚本可以在响应中的任何位置,您需要将任何函数定义分配给全局变量,以使它们可用于您的页面。

  

关于evalScripts和定义   函数如果使用evalScripts:   是的,任何块都将是   评估。这并不意味着它会   加入页面:他们不会。   他们的内容将简单地传递给   本机eval()函数。有   两个后果:

     

本地范围将是   Prototype的内部处理   功能。脚本中的任何内容   用var声明将被丢弃   在评估之后,并且在   任何比率都是不可见的   页面脚本的其余部分。如果你   在那里定义函数,你需要   实际创建它们,否则它们   剩下的将无法访问   的页面脚本。那就是   以下代码无效:

// This kind of script won't work if processed by Ajax.Updater:
function coolFunc() {
    // Amazing stuff!
}
     

您   将需要使用以下语法:

// This kind of script WILL work if processed by Ajax.Updater:
coolFunc = function() {
   // Amazing stuff!
}
相关问题