【问题标题】:How does jQuery's .ajax method define a 'failed' request?jQuery 的 .ajax 方法如何定义“失败”请求?
【发布时间】:2017-11-17 01:52:10
【问题描述】:

令人惊讶的是,documentation for .ajax 似乎没有在任何地方定义术语“成功”和“失败”。

有明显的规则,例如:

  • 任何4xx5xx 状态码都会触发.fail()
  • 任何2xx 状态码都会触发.done()(成功)

但是,除了响应代码之外,似乎还有一些额外的逻辑,.ajax 使用这些逻辑来确定响应是否“失败”。

例如,如果无法根据选择的dataType 解析响应,这将被视为失败。尤其是这种情况,例如,如果设置了dataType: json

对JSON数据进行严格解析;任何格式错误的 JSON 都会被拒绝并引发解析错误。从 jQuery 1.9 开始,空响应也会被拒绝;服务器应该返回 null 或 {} 的响应。

jQuery 用来确定请求是否成功的完整规则列表是什么?

【问题讨论】:

    标签: jquery ajax jquery-deferred


    【解决方案1】:

    .ajax 是在 XMLHttpRequest 对象之上实现的,这是做 ajax 的“javascript 方式”。而且 XMLHttpRequest 也是基于 HTTP 协议的,所以你可能想查看this 列表,可以恢复为:

    • 1xx 信息性消息(返回正常)
    • 2xx 成功(返回正常)
    • 3xx 重定向
    • 4xx 客户端错误(返回失败)
    • 5xx 服务器错误(返回失败)

    您正在寻找的“逻辑”是检查每个响应代码类型。

    【讨论】:

    • 对,但就像我的问题指出的那样,.ajax 不能保证仅根据响应代码返回成功/失败。还有一些其他活动,例如解析响应数据,会影响 .ajax 的行为。
    • ¿您是否检查过“例如,如果无法根据所选数据类型解析响应,这将被视为失败”中的响应代码号。 ?我很确定它是 4xx ..
    • 响应码是 200。我不是在寻找这个问题中的故障排除技巧——我在寻找.ajax 内部逻辑的完整指南。
    • @DiegoS 作为参考,400 Bad Request 是客户端错误,因此如果服务器返回格式错误的响应,则不会使用...
    猜你喜欢
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    相关资源
    最近更新 更多