Come faccio ad ottenere il codice di stato HTTP con jQuery?

Voglio controllare se una pagina restituisce il codice di stato 401. È possibile questo?

Ecco la mia prova, ma è solo restituisce 0.

$.ajax({
    url: "http://my-ip/test/test.php",
    data: {},
    complete: function(xhr, statusText){
    alert(xhr.status); 
    }
});
  • Controllare il valore di statusText, il secondo parametro per la funzione di callback, invece.
  • questa avvisi “Necessaria Autorizzazione”. Ican lavoro, ma un 401 avviso sarebbe meglio 😉
InformationsquelleAutor horgen | 2010-06-02

 

8 Replies
  1. 89

    questo è possibile con jQuery $.ajax() metodo

    $.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');
       },
    });
    • Credo che questo, ora non funziona più, ho provato, qualche idea?
    • Il suo lavoro bene. Si può condividere quello che stai cercando ?
    • ha chiesto il codice di 401 stato
    • Quindi, per modificare il 400 401.
    • Che cosa importa?
    • Si noti che il codice 200(fatto) parametro di dati, mentre altri(non) sono jqXHR

  2. 60

    Il terzo argomento è l’oggetto XMLHttpRequest, così puoi fare quello che vuoi.

    $.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
    });
    • Restituisce questo: XMLHttpRequest impossibile caricare example.com. No Access-Control-Allow-Origin’ intestazione è presente la risorsa richiesta. Origine ‘stackoverflow.com‘, pertanto, non è consentito l’accesso.
    • E ‘ necessario abilitare CORS trattamento per sbarazzarsi di la ‘Access-Control-Allow-Origin’ problema. A seconda del tipo di progetto che si sta trattando, si potrebbe non essere in grado di risolvere questo soprattutto se l’API è in un dominio diverso e che non permette di croce richieste di dominio
    • Come gestire il CORS , come se mi stesse API chiamata con Php non dare alcun errore di CDR, ma se fossi ajax per la stessa chiamata di API mi dà Errore di CORS. Per favore fatemi sapere
    • Questo non funzionerà se il codice di stato è 400 (e probabilmente per altri codici che non sono 200)
  3. 20

    Utilizzare l’errore di callback.

    Per esempio:

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

    Avviso 404

    • infatti lo ha fatto. Sono un po ‘ nuovo per jQuery. Ma che cosa circa 401 stato? Come faccio a salvare lo stato di una variabile? o_O
    • Firebug restituisce questo: OTTENERE my-ip/test/test.php 401 Autorizzazione Richiesta
    • Mostrerà 401 stesso modo. Che cosa si vuole fare con l’errore?
    • Se 401 non mandare utente di questa pagina. Solo l’errore avvisi se la pagina non trovata (404)
    • Testato questo in Firefox, dove è catturato 401, forse questo non è vero per tutti i browser
  4. 7

    Ho trovato questa soluzione, dove si può semplicemente,
    controllare il codice di risposta del server utilizzando codice di stato.

    Esempio :

    $.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);
    } 
    });
    • È possibile aggiungere codice di stato blocco come molti come si desidera controllare.
    • Se la risposta non è successo pieno e il codice di stato della risposta non è nemmeno 403 poi si va di errore di blocco.
  5. 7

    Penso che si dovrebbe implementare anche la funzione di errore del $.ajax metodo.

    errore(XMLHttpRequest, textStatus,
    errorThrown)Funzione

    Una funzione da chiamare se la richiesta
    non riesce. La funzione viene passato tre
    argomenti: L’oggetto XMLHttpRequest,
    una stringa che descrive il tipo di errore
    che si è verificato e un optional
    oggetto di eccezione, se uno si è verificato.
    I valori possibili per la seconda
    argomento (oltre null) sono “timeout”,
    “errore”, “notmodified” e
    “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); 
        }
    });
    • thx, ma solo completare restituisce 0. È possibile ottenere il codice 401?
    • Sei sicuro di completamento viene chiamato quando un errore HTTP 401 (non autorizzato) che viene restituito dal server? Non ho ancora testato, ma mi aspetterei che l’errore è chiamato.
    • completo Tipo: Function( jqXHR jqXHR, String textStatus ) Una funzione nel momento in cui la richiesta di finiture (dopo il successo di errore e di callback vengono eseguiti). La funzione viene passato due argomenti: Il jqXHR (in jQuery 1.4.x, XMLHTTPRequest) oggetto e una stringa di categorizzare lo stato della richiesta (“successo”, “notmodified”, “errore”, “timeout”, “abort”, o “parsererror”). Come jQuery 1.5, la realizzazione completa in grado di accettare una serie di funzioni. Ogni funzione, sarà chiamato a sua volta. Questo è un Ajax Evento.
  6. 6
    $.ajax({
        url: "http://my-ip/test/test.php",
        data: {},
        error: function(xhr, statusText, errorThrown){alert(xhr.status);}
    });
  7. 3

    Ho incapsulare l’Ajax di jQuery per un metodo:

    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
            }
        })
    
    }

    Uso:

    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)
    })
  8. 0

    Ho avuto grandi problemi con ajax + jQuery v3 ottenere sia il codice di stato della risposta e i dati JSON Api. jQuery.ajax solo decodifica i dati JSON se lo stato è un successo, e anche di swap in tutto l’ordinamento della richiamata parametri in base al codice di stato. Ugghhh.

    Il modo migliore per combattere questo è quello di chiamare il .always metodo della catena e fare un po ‘ di pulizia. Ecco il mio codice.

    $.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);
        });

Lascia un commento