Jquery ajax errore di callback

Ho bisogno di alcuni suggerimenti qui o forse alcune spiegazioni. Ho una chiamata ajax jquery,

$.ajax({
 type: "GET",
 url: base_url+'/ajax/fetch/counts/',
 dataType: 'json',
 data: {},
 error: function(xhr, error){
        console.debug(xhr); console.debug(error);
 },
 success: display_counts
});

Sta funzionando bene. Il mio success di callback viene generato correttamente con la risposta. Ma, quello che ho notato è che il mio error di callback viene generato ogni volta, anche quando la chiamata restituisce l’esito del 200. Sopra error richiamata, vedo che oggetto xhr.status è 200.

Qualcuno può spiegare cosa c’è di sbagliato, o che cosa sta succedendo qui? error richiamata si suppone che il fuoco solo quando ho 404 o forse un non-risposta 200. Sono la mia ipotesi è corretta?

Grazie.

 

6 Replies
  1. 28

    Errore di callback viene chiamata http errori, ma anche se parsing JSON di risposta, non riesce. Questo è quello che probabilmente succede se il codice di risposta è di 200 ma ancora sono buttato per errore di callback.

    • Se sono in attesa di una non risposta JSON. È possibile impostare il tipo di dati opzione per lo script di testo, ecc…Checkout api.jquery.com/jQuery.ajax e guardare sotto dataFilter per ulteriori informazioni.
    • Mi stava chiamando uno script cgi, ho bisogno di eseguire il dump dei dati in formato json. Era restituire una stringa che non è riuscito.
  2. 30

    Solo un suggerimento, prova a utilizzare il $.ajaxSetup() per ottenere il corretto errore come questo:

    $(function() {
        $.ajaxSetup({
            error: function(jqXHR, exception) {
                if (jqXHR.status === 0) {
                    alert('Not connect.\n Verify Network.');
                } else if (jqXHR.status == 404) {
                    alert('Requested page not found. [404]');
                } else if (jqXHR.status == 500) {
                    alert('Internal Server Error [500].');
                } else if (exception === 'parsererror') {
                    alert('Requested JSON parse failed.');
                } else if (exception === 'timeout') {
                    alert('Time out error.');
                } else if (exception === 'abort') {
                    alert('Ajax request aborted.');
                } else {
                    alert('Uncaught Error.\n' + jqXHR.responseText);
                }
            }
        });
    });
    • Proprio come un a parte, i Documenti di stato: Nota: Global funzioni di callback deve essere impostato con i loro rispettivi globale Ajax metodi del gestore di eventi—.ajaxStart(), .ajaxStop(), .ajaxComplete(), .ajaxError(), .ajaxSuccess(), .ajaxSend()—piuttosto che all’interno di oggetto opzioni per $.ajaxSetup(). sembra che questo possa essere meglio utilizzato in .ajaxError()
    • Quindi, una cosa importante da realizzare, naturalmente, è che il tuo ajax potrebbe non riuscire sul computer di un utente se la loro connessione a internet è limitato. Così la vostra app potrebbe funzionare bene, ma ottengono fallito richieste ajax a causa di una cattiva connessione internet – che sembra essere identificabile dalla status === 0 e exception === 'timeout' casi di cui sopra.
    • Inoltre nota che docs, afferma che: “Questo può causare un comportamento indesiderato, poiché gli altri chiamanti (per esempio, plugin) potrebbe essere in attesa le normali impostazioni predefinite. Per questo motivo abbiamo sconsiglia vivamente l’uso di questa API.
  3. 2

    Un paio di cose che posso pensare:

    1. Assicurarsi di aver disattivato la cache impostando cache: false.
    2. Se si utilizza Firefox, prova con Firebug e la rete scheda per monitorare la richiesta
    3. Non fare affidamento sul browser JSON parser. Vorrei raccomandare questo: https://github.com/douglascrockford/JSON-js/blob/master/json2.js dal creatore di JSON non meno
    • “banale e scontato” – beh, è semplicemente crudele. 🙂
    • Beh, mi dispiace se è stata davvero dura. +1 per il riferimento a JSON parser cosa. 🙂
    • solo scherzando, non c’è problema
    • affidamento del browser JSON parser”?? perché? è lo stesso per ora????
    • Alcuni vecchi browser non supporta JSON, in modo da utilizzare una terza parte parser in primo luogo, potrebbe prevenire la compatibilità di mal di testa.
  4. 1

    Un recente questione avuto un problema simile con json jquery richieste, provare a rimuovere circostante () dalla tua risposta json.

    • Divertente, ho avuto un problema simile che è stato risolto da aggiunta di circostanti staffe.
    • Sì, questa cosa io di solito usato per fare, ma jquery 1.4.2 inizia a fare affidamento su browser JSON.parse, il mio firefox JSON.parse sarebbero parse {"key":"value"} correttamente, ma il problema di un errore sulla ({"key":"value"}).
    • Per aggirare le differenze nel quale browser analizzare JSON, mi consiglia di utilizzare Douglas Crockford del parser: json.org/json2.js
  5. 1

    Io non sono un esperto di jQuery, ma so che con l’Prototype.js l’AJAX error handler incendi se la richiesta va a buon fine ma il success gestore causa di un errore. È che la stessa in jQuery? Si potrebbe verificare se questo è quello che succede mettendo l’intero contenuto di display_counts in un blocco try..catch.

  6. -1

    Cambiare dataType da plain/text per html

    • …ma OP non c’è nemmeno normale/tipo di dati testo

Lascia un commento