success
只有在AJAX调用成功时才会触发,即最终返回HTTP 200状态。error
是
失败时会触发,complete
在
请求结束会触发,无论成功与否。
在jQuery 1.8上的jqXHR
对象(返回者$.ajax
)success
被替换为done,error
被替换为fail,
complete
被替换为always
。
但您仍然应该能够使用旧语法来初始化AJAX请求。所以这些做类似的事情:
//before
var v1=$('#q1').val()
var v2=$('#q2').val()
$.ajax({
type: "post",
url: '...',
data: {'a1':v1,'a2':v2},
success: function(){
alert('AJAX successful');
}
});
//after
var data = $("#XXXForm").serializeArray();
data = parseJson(data);
$.ajax({
type: "post",
url: contextPath + "/XX/xx",
dataType: "json",
contentType: "application/json",
scriptCharset: "utf-8",
async: false,
data: JSON.stringify(data)
}).done(function(data){
//成功
alert('AJAX successful');
}).fail(function(jqXHR, textStatus, errorThrown){
//失败
alert(jqXHR.responseJSON.message);
}).always(function( jqXHR, textStatus ){
//
});
然而,请注意,done
现在已弃用而改为Promise
使用的语法then
:
Promise规范中,then方法接受两个参数,分别是执行完成和执行失败的回调,而jquery中进行了增强,还可以接受第三个参数,就是在pending状态时的回调,如下:
deferred.then( doneFilter [, failFilter ] [, progressFilter ] )
除此之外,jquery还增加了两个语法糖方法,done和fail,分别用来指定执行完成和执行失败的回调,也就是说这段代码:
d.then(function(){
console.log('执行完成');
}, function(){
console.log('执行失败');
});
简例:
function success(responseText){
console.log(1)
}
function fial(request){
console.log(2)
}
$.ajax({
url:'/xxx'
method:'post'
}).then(success,fail)
//也可以这样写
$.ajax({
url:'/xxx'
method:'post'
}).then(
(responseText) => {console.log('success')}
,(request) => {console.log('error')}
)
//.then()是可以有多个的
如对你有用的话,请给个赞或评论一下,谢谢