【问题标题】:Difference between .success() and .complete()?.success() 和 .complete() 之间的区别?
【发布时间】:2011-03-09 03:11:53
【问题描述】:

从 jQuery 1.5 开始,所有 jQuery 的 AJAX 方法都返回一个 jqXHR 对象,该对象提供 .error().success().complete() 方法。

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

【问题讨论】:

  • @nix 你有更详细描述弃用内容的链接吗?
  • @neoneye Ctrl+F api.jquery.com/jQuery.ajax/上的“弃用通知”

标签: jquery


【解决方案1】:

.success() 仅在您的网络服务器以 200 OK HTTP 标头响应时才会被调用 - 基本上是在一切正常的情况下。

但是,无论 ajax 调用是否成功,.complete() 都会总是被调用 - 也许它会输出错误并返回错误 - .complete() 仍会被调用。 p>

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

【讨论】:

  • .success 在服务器响应任何成功状态代码2XX 时调用,例如 200、201,
【解决方案2】:

success() 在服务器返回 200 状态码时调用,complete() 总是在请求完成时调用,无论结果如何。

【讨论】:

    【解决方案3】:

    服务器返回success status code时调用success(),如:200201

    complete() 总是在请求完成时被调用。 (不管怎样,都是来自服务器的成功/错误响应。)


    所以,

    • 当有来自服务器的success 响应时:success()complete() 被调用。
    • 当有来自服务器的error 响应时:调用error()complete()

    示例:您可以出于什么目的使用complete()
    假设在beforeSend() 中显示loader image,在complete() 中,您可以隐藏loader image

    【讨论】:

    • complete 在成功或错误之后被调用,因此如果您在答案中交换方法会更清楚。例如。成功()和完成()
    • 谢谢@Toby,我已经更新了答案。
    【解决方案4】:

    success() 在服务器返回 200 状态码时调用,complete()success() 之后调用。我看到了一些不同:

    success() 上,您无法获得使用$.ajax() 并设置dataType:xml 获得的xml 响应字符串 但在complete() 中,您可以使用

    获取读取的 xml 文档的字符串格式
    $.ajax({
    url:'??',
    dataType:'xml',
    oncomplete: function(data,status){
    console.log(data.responseText);
    }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-29
      • 2012-11-24
      • 1970-01-01
      • 2021-12-25
      • 2020-05-10
      • 2014-09-20
      • 2010-10-28
      • 2015-10-04
      相关资源
      最近更新 更多