如何使用jQuery获取HTTP状态代码?

时间:2010-06-02 08:09:26

标签: jquery ajax xmlhttprequest http-status-codes http-status-code-401

我想检查页面是否返回状态代码401.这可能吗?

这是我的尝试,但它只返回0.

$.ajax({
    url: "http://my-ip/test/test.php",
    data: {},
    complete: function(xhr, statusText){
    alert(xhr.status); 
    }
});

9 个答案:

答案 0 :(得分:89)

这可以使用jQuery $.ajax()方法

$.ajax(serverUrl, {
   type: OutageViewModel.Id() == 0 ? "POST" : "PUT",
   data: dataToSave,
   statusCode: {
      200: function (response) {
         alert('1');
         AfterSavedAll();
      },
      201: function (response) {
         alert('1');
         AfterSavedAll();
      },
      400: function (response) {
         alert('1');
         bootbox.alert('<span style="color:Red;">Error While Saving Outage Entry Please Check</span>', function () { });
      },
      404: function (response) {
         alert('1');
         bootbox.alert('<span style="color:Red;">Error While Saving Outage Entry Please Check</span>', function () { });
      }
   }, success: function () {
      alert('1');
   },
});

答案 1 :(得分:60)

第三个参数是XMLHttpRequest对象,所以你可以做任何你想做的事。

$.ajax({
  url  : 'http://example.com',
  type : 'post',
  data : 'a=b'
}).done(function(data, statusText, xhr){
  var status = xhr.status;                //200
  var head = xhr.getAllResponseHeaders(); //Detail header info
});

答案 2 :(得分:20)

使用错误回调。

例如:

jQuery.ajax({'url': '/this_is_not_found', data: {}, error: function(xhr, status) {
    alert(xhr.status); }
});

将提醒404

答案 3 :(得分:7)

我认为您还应该实现$.ajax方法的错误功能。

  

错误(XMLHttpRequest,textStatus,   errorThrown)功能

     

请求时要调用的函数   失败。该功能通过三次   arguments:XMLHttpRequest对象,   描述错误类型的字符串   发生了并且是可选的   异常对象,如果发生了一个。   第二个可能的值   参数(除了null)是“超时”,   “错误”,“未修改”和   “parsererror”。

$.ajax({
    url: "http://my-ip/test/test.php",
    data: {},
    complete: function(xhr, statusText){
        alert(xhr.status); 
    },
    error: function(xhr, statusText, err){
        alert("Error:" + xhr.status); 
    }
});

答案 4 :(得分:7)

我找到了这个解决方案,你可以简单地,  使用状态代码检查服务器响应代码。

示例:

$.ajax({
type : "POST",
url : "/package/callApi/createUser",
data : JSON.stringify(data),
contentType: "application/json; charset=UTF-8",
success: function (response) {  
    alert("Account created");
},
statusCode: {
    403: function() {
       // Only if your server returns a 403 status code can it come in this block. :-)
        alert("Username already exist");
    }
},
error: function (e) {
    alert("Server error - " + e);
} 
});

答案 5 :(得分:6)

$.ajax({
    url: "http://my-ip/test/test.php",
    data: {},
    error: function(xhr, statusText, errorThrown){alert(xhr.status);}
});

答案 6 :(得分:3)

我将jQuery Ajax封装为一个方法:

var http_util = function (type, url, params, success_handler, error_handler, base_url) {

    if(base_url) {
        url = base_url + url;
    }

    var success = arguments[3]?arguments[3]:function(){};
    var error = arguments[4]?arguments[4]:function(){};



    $.ajax({
        type: type,
        url: url,
        dataType: 'json',
        data: params,
        success: function (data, textStatus, xhr) {

            if(textStatus === 'success'){
                success(xhr.code, data);   // there returns the status code
            }
        },
        error: function (xhr, error_text, statusText) {

            error(xhr.code, xhr);  // there returns the status code
        }
    })

}

用法:

http_util('get', 'http://localhost:8000/user/list/', null, function (status_code, data) {
    console(status_code, data)
}, function(status_code, err){
    console(status_code, err)
})

答案 7 :(得分:0)

我在使用ajax + jQuery v3时遇到了主要问题,同时从JSON API获取响应状态代码和数据。 jQuery.ajax仅在状态为成功时解码JSON数据,并且还会根据状态代码围绕回调参数的顺序进行交换。 g。

解决此问题的最佳方法是调用.always链方法并进行一些清理。这是我的代码。

$.ajax({
        ...
    }).always(function(data, textStatus, xhr) {
        var responseCode = null;
        if (textStatus === "error") {
            // data variable is actually xhr
            responseCode = data.status;
            if (data.responseText) {
                try {
                    data = JSON.parse(data.responseText);
                } catch (e) {
                    // Ignore
                }
            }
        } else {
            responseCode = xhr.status;
        }

        console.log("Response code", responseCode);
        console.log("JSON Data", data);
    });

答案 8 :(得分:-1)

在WAMP SERVER apache2中测试

httpd.conf和agregar esto:

Data Source:
------------------------------
TODAY                   TEST
YESTERDAY               HELLO
YESTERDAY               HI
YESTERDAY               HELLO
BEFORE YESTERDAY        HEY
BEFORE YESTERDAY        HI
A WEEK AGO              HELLO
A WEEK AGO              HEY

Assuming fxLookUpList will have "HELLO" and "HI";

Output =>
YESTERDAY | HELLO
YESTERDAY | HI

Assuming fxLookUpList will have "HEY" and "HI";

Output =>
YESTERDAY | HELLO
BEFORE YESTERDAY | HEY

Assuming fxLookUpList will have "TEST" and "HEY";

Output =>
TODAY | TEST
BEFORE YESTERDAY | HEY

在apache上启用下一个模块 headers_module

重新启动所有服务