我有以下示例页面:
<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函数注册到调用页面?
最佳答案
为了回应评论,我戳了documentation,当更新程序评估脚本时,似乎对原型有一些特殊规则。脚本可以在响应中的任何位置,但是您需要将任何函数定义分配给全局变量,以使它们可用于页面。
关于evalScript和定义
函数如果您使用evalScripts:
是的,任何块都是
评估。这并不意味着会
包含在页面中:他们不会。
他们的内容只会传递给
本机eval()函数。有
这有两个后果:
本地范围将是
原型的内部处理
功能。脚本中的任何内容
用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!
}