我有以下示例页面:

<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!
}

07-24 09:44
查看更多