jquery - 如何在 jquery ajax 中处理 204 响应?

标签 jquery

由于我已经声明了 success 和 error ajax 选项,其中响应为 204,ajax 方法会转到选项 success,从而导致错误。

根据文档,我们可以使用 StatusCode 或 Complete 方法,但这里的缺点是必须声明所有状态代码,例如 2?系列,3??系列,4??系列!由于这些响应是动态的,我不确定 http 状态代码。

那么,在 jquery ajax 中处理 http 状态代码的更好方法是什么?

最佳答案

从 jQuery 1.5 开始,$.ajax() 返回的 jqXHR 对象实现了 Promise 接口(interface)。 done 函数中的第三个参数是 jqXHR 对象。该对象有一个表示结果的 http 状态代码的属性。

jqXHR.done(function(data, textStatus, jqXHR) {}); An alternative construct to the success callback option, the .done() method replaces the deprecated jqXHR.success() method. Refer to deferred.done() for implementation details. link

    $.ajax({
      url: "http://fiddle.jshell.net/favicon.png",
      beforeSend: function ( xhr ) {
          xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
      }
    }).done(function ( data, textStatus, jqXHR) {
       console.log(jqXHR.status); //handle your 204 or other status codes here
    });

fiddle http://jsfiddle.net/puleos/fVa7X/

假设您想将所有非 200 状态代码视为错误,您可以执行以下操作:

var p = $.ajax({
          url: "http://fiddle.jshell.net/favicon.png",
          beforeSend: function ( xhr ) {
             xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
          }
        });

p.done(function(data, textStatus, jqXHR) {
  if(jqXHR.status !== 200) {
     handleError(jqXHR.status);
     return;
  }
  // Normal processing here
});

p.fail(function(jqXHR, textStatus) {
   handleError(jqXHR.status); 
});

关于jquery - 如何在 jquery ajax 中处理 204 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16219595/

相关文章:

php - 根据下拉选择的结果填充文本字段 - 均使用 php mysql ajax 请求

javascript - 将每个出现的字符串放入 html 标签中

javascript - 变量未在同一 JavaScript 页面中从一个函数传递到另一个函数

javascript - 单击 chart.js 中的各个栏时如何显示 Bootstrap 模式

jquery - CSS 水平滚动溢出与 jQuery slider

javascript - 代码镜像 - 使给定行完全变灰

jquery - CSS 样式不适用于 jquery 弹出窗口

javascript - js改变下拉列表

javascript - 如何从被调用函数获得响应?

javascript - jQuery 选择器 : targeting inputs in a form