jQuery ajax成功回调函数定义

我想使用jQueryAjax从服务器检索数据

我想将成功回调函数定义置于.ajax()块之外,如下所示。那么,我是否需要像下面那样声明变量dataFromServer,以便能够使用从成功回调返回的数据

我见过大多数人在.ajax()块中定义成功回调。如果我想在外部定义成功回调,那么下面的代码正确吗

var-dataFromServer//首先声明变量
函数getData(){
$.ajax({
url:'example.com',
键入:“GET”,
成功:handleData(dataFromServer)
})
}
函数句柄数据(数据){
警报(数据);
//做点什么
}

自jQuery1.5(2011年1月)以来,实现这一点的“新”方法是使用延迟对象,而不是传递success回调。您应该返回$.ajax的结果,然后使用.done.fail等方法在$.ajax调用之外添加回调

函数getData(){
返回$.ajax({
url:’example.com’,
键入:“获取”
});
}
函数handleData(数据/*,文本状态,jqXHR*/){
警报(数据);
//做点什么
}
getData().done(handleData);

将回调处理与AJAX处理分离,允许您添加多个回调、失败回调等,而无需修改原始的getData()函数。将AJAX功能与以后要完成的操作集分离是一件好事

延迟还允许更轻松地同步多个异步事件,而仅凭success:

例如,我可以添加多个回调、一个错误处理程序,并在继续之前等待计时器过去:

//一个简单的计时器,仅用于演示目的-
//它会在5秒后自行解决
var timer=$.Deferred();
设置超时(timer.resolve,5000);
//添加一个已完成的处理程序和一个`error:`handler,即使`getData`
//没有直接公开该功能
var ajax=getData().done(handleData).fail(错误);
$.when(计时器,ajax).done(函数(){
//在AJAX和5s计时器都完成之前,不会调用它
});
完成(函数(数据){
//您还可以添加其他回调,即使AJAX调用
//已经完成
});

jQuery的其他部分也使用延迟对象——您可以非常轻松地使用它们将jQuery动画与其他异步操作同步

发表评论