我有这个示例页面:
<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函数注册到调用页面?
答案 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! }