One*_*erd 2 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>
Run Code Online (Sandbox Code Playgroud)
我这叫它:
new Ajax.Updater($(element), page, { method: "get", evalScripts: true });
Run Code Online (Sandbox Code Playgroud)
警报正在运行,但该函数未注册(ajax_hello()).
有没有办法让ajax将javascript函数注册到调用页面?
在回应评论时,我对文档进行了调查,看起来在更新程序评估脚本时,Prototype有一些特殊规则.脚本可以位于响应中的任何位置,但您需要将任何函数定义分配给全局变量,以使其可用于页面.
关于evalScripts和定义函数如果使用evalScripts:true,将评估任何块.这并不意味着它将被包含在页面中:它们不会.它们的内容将简单地传递给本机eval()函数.这有两个后果:
本地范围将是Prototype的内部处理功能.使用var声明的脚本中的任何内容都将在评估后暂时丢弃,并且无论如何对页面脚本的其余部分都是不可见的.如果在那里定义函数,则需要实际创建它们,否则页面脚本的其余部分将无法访问它们.也就是说,以下代码不起作用:
Run Code Online (Sandbox Code Playgroud)// This kind of script won't work if processed by Ajax.Updater: function coolFunc() { // Amazing stuff! }您需要使用以下语法:
Run Code Online (Sandbox Code Playgroud)// This kind of script WILL work if processed by Ajax.Updater: coolFunc = function() { // Amazing stuff! }
| 归档时间: |
|
| 查看次数: |
4177 次 |
| 最近记录: |