success只有在AJAX调用成功时才会触发,即最终返回HTTP 200状态。error失败时会触发,complete请求结束会触发,无论成功与否。

在jQuery 1.8上的jqXHR对象(返回者$.ajaxsuccess被替换为done,error被替换为failcomplete被替换为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()是可以有多个的

如对你有用的话,请给个赞或评论一下,谢谢

更多推荐

$ .ajax的success和.done()方法的区别及其他