.success()和.complete()有什么区别?

112
自jQuery 1.5版本起,所有的jQuery AJAX方法都返回一个jqXHR对象,提供.error().success().complete()方法。 .success().complete()有什么区别?

2
@nix,你有没有一个链接可以更详细地描述已弃用的内容? - neoneye
在api.jquery.com/jQuery.ajax/上按Ctrl+F查找“deprecation notice”。 - ThatGuy
3
这是一个关于使用Python编写的程序的说明,可以将Excel文件中的数据转换为JSON格式。用户需要提供Excel文件的路径和工作表名称,并指定要转换的列。程序将读取Excel文件并将所选列的数据转换为JSON格式的输出文件。 - Ivan Black
4个回答

232

.success() 只有在你的 Web 服务器响应 200 OK 的 HTTP 头时才会被调用,基本上是一切正常的情况下。

然而,无论 Ajax 调用是否成功(可能输出了错误并返回了错误),.complete() 都将始终被调用。

值得一提的是,.complete() 将在 .success() 被调用之后 立即 被调用,如果这对你很重要的话。


当服务器响应任何成功状态码2XX,如200、201时,将调用.success。 - Roubi

11

success() 当服务器返回200状态码时被调用,而complete() 无论请求的结果如何都会被调用。


3

success()会在服务器返回成功状态码,比如:200201等时被调用。

complete()总是在请求完成后被调用。(不管是从服务器得到的成功/错误响应)


所以:

  • 当服务器返回成功响应时:success()complete() 被调用。
  • 当服务器返回错误响应时:error()complete() 被调用。

例如:你可以使用 complete() 来进行以下操作:
假设在 beforeSend() 中展示了一个 loader image,那么在 complete() 中,你可以隐藏该 loader image


1
complete()被调用是在成功或错误之后,因此如果您交换了方法名称,那么会更清晰。例如,将success()和complete()互换。 - Toby
1
谢谢 @Toby,我已经更新了答案。 - mahfuz

1

success()在服务器返回200状态码时调用,complete()success()之后调用。我注意到一些区别:

success()中,您无法获取使用$.ajax()和设置dataType:xml时获取的xml响应字符串。但是,在complete()中,您可以获取已读取的xml文档的字符串格式。

$.ajax({
url:'??',
dataType:'xml',
oncomplete: function(data,status){
console.log(data.responseText);
}
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接