以使用新的Ajax.Responders对象。
假设你想要在一个AJAX调用正在运行时,显示一些提示效果,像一个不断转动的图标之类的,你可以使用两个全局事件Handler来做到,其中一个在第一个调用开始时显示图标,另一个在最后一个调用完成时隐藏图标。看下面的例子。
<script>
var myGlobalHandlers = {
onCreate: function(){
Element.show(''systemWorking'');
},
onComplete: function() {
if(Ajax.activeRequestCount == 0){
Element.hide(''systemWorking'');
}
}
};
Ajax.Responders.register(myGlobalHandlers);
</script>
<div id=''systemWorking''><img src=''http://www.cxy.me/doc/spinner.gif''>Loading</div>
更完全的解释,请参照 Ajax.Request 参考 和 Ajax选项参考。
使用Ajax.Updater类
如果你的服务器的另一端返回的信息已经是HTML了,那么使用这个
程序包中 Ajax.Updater 类将使你的生活变得更加得容易。用它你只需提供哪一个元素需要被AJAX请求返回的HTML填充就可以了,例子比我写说明的更清楚。
<script>
function getHTML()
{
var url = ''http://yourserver/app/getSomeHTML'';
var pars = ''someParameter=ABC'';
var myAjax = new Ajax.Updater(
''placeholder'',
url,
{
method: ''get'',
parameters: pars
});
}
</script>
<input type=button value=GetHtml onclick="getHTML()">
<div id="placeholder"></div>
你可以看到,这段代码比前面的例子更加简洁,不包括 onComplete 方法,但是在构造方法中传入了一个元素id。 我们来稍稍修改一下代码来描述如何在客户端处理服务器段错误成为可能。
我们将加入更多的选项, 指定处理错误的一个方法。这个是用 onFailure 选项来完成的。我们也指定了一个 placeholder 只有在成功请求之后才会被填充。为了完成这个目的我们修改了第一个参数从一个简单的元素id到一个带有两个属性的对象, success (一切OK的时候被用到) 和 failure (有地方出
问题的时候被用到) 在下面的例子中没有用到failure属性,而仅仅在 onFailure 处使用了 reportError 方法。
<script>
function getHTML()
{
var url = ''http://yourserver/app/getSomeHTML'';
var pars = ''someParameter=ABC'';
var myAjax = new Ajax.Updater(
{success: ''placeholder''},
url,
{
method: ''get'',
parameters: pars,
onFailure: reportError
});
}
function reportError(request)
{
alert(''Sorry. There was an error.'');
}
</script>
<input type=button value=GetHtml onclick="getHTML()">
<div id="placeholder"></div>
如果你的服务器逻辑是连同HTML 标记返回JavaScript 代码, Ajax.Updater对象可以执行那段JavaScript代码。为了使这个对象对待响应为JavaScript,你只需在最后参数的对象构造方法中简单加入evalScripts: true属性。但是值得提醒的是,像这个选项名evalScripts暗示的,这些脚本会被执行,但是它们不会被加入到Page的脚本中。“有什么区别?”,可能你会这样问。我们假定请求地址返回的东东像这样:
<script language="javascript" type="text/javascript">
function sayHi(){
alert(''Hi'');
}
</script>
<input type=button value="Click Me" onclick="sayHi()"&g