10-讨论
16.2.3 讨论
在开发较大的应用程序时,往往通过一个公用的Ajax网关传递所有请求。使用 $.ajaxSetup() 方法,我们可以设置Ajax请求默认设置。这会使整个应用程序中的Ajax请求变得简单:
$.ajax({
data: {
//我从服务器请求的数据
},
success: function(data) {
//现在更新用户界面
}
});
简单提一句,因为超时选项的值以毫秒表示(秒数×1000),所以超时值6000代表6秒。设置该值时要考虑的一件事是全球互联网的扩展。在你的访问者或者用户中,有些人所在位置的网络延迟可能超过你所在地区用户的期望值。所以,不要将该值设置得太低(例如,5秒)。指定较高的值(如30或者60秒)可以让具有高延迟连接(例如,使用卫星信道)的用户仍然能够享用你的应用程序。
在前一个例子中,对 ajax-gateway.php 进行POST请求。发生的错误将由 $.ajaxSetup() 中定义的错误函数处理。对于特定的请求,仍然可以按照如下方式覆盖设置:
$.ajax({
url: 'another-url.php',
data: {
// 服务器请求数据
},
success: function(data) {
//现在更新用户界面
}
});
把前一个请求发送给 another-url.php 而不是 ajax-gateway.php 。
jQuery Ajax架构的好处之一是 ajaxComplete 、 ajaxError 、 ajaxSend 、 ajaxStart 、 ajaxStop 和 ajaxSuccess 等全局事件。这些事件可以用 .bind('event', callback) 方法或者快捷方法 .event(callback) 设置。下面的例子展示了为 ajaxError 事件绑定回调的两种方法:
(function($) {
$(document).ready(function() {
$('#loadingIndicator')
.ajaxError(function() {
//你的代码
});
//或者使用bind()
$('#loadingIndicator')
.bind('ajaxError', function() {
//你的代码
});
});
})(jQuery);
下面是可用事件的简要描述,以及触发的顺序:
ajaxStart
如果没有其他请求正在进行,则在Ajax请求开始时触发。
ajaxSend
在每个单独请求发送之前触发。
ajaxSuccess 或 ajaxError
在请求成功或者不成功时触发。
ajaxComplete
每当请求完成(不管成功还是出错)时触发。
ajaxStop
如果没有其他Ajax请求正在进行中则触发。
在下一个秘诀中,更详细地介绍这些事件。