2012-06-07 10 views
5

Ho il seguente:Come posso ottenere informazioni di ritorno da una chiamata Ajax quando la connettività Internet è perso

$.ajax({ cache: false, 
    url: "/Admin/Contents/GetData", 
    data: { accountID: AccountID }, 
    success: function (data) { 
     $('#CityID').html(data); 
    }, 
    error: function (ajaxContext) { 
     alert(ajaxContext.responseText) 
    } 
}); 

quando perdo la connettività a Internet l'errore è chiamato, ma non vedo nulla nel responseText.

Esiste un modo per individuare diversi tipi di errori in base alle informazioni sullo stato nel file restituito ajaxContent? Mi piacerebbe davvero essere in grado di far uscire un messaggio che dice "Connettività Internet persa" e un altro messaggio se c'è qualche altro problema.

risposta

1

Aggiornato.

È necessario aggiungere: timeout: da qualche parte all'interno di $ .ajax ({}). Inoltre, cache: false, potrebbe aiutare in alcuni scenari.

$ .ajax è ben documentato, dovresti controllare le opzioni lì, potrebbe trovare qualcosa di utile.

JQuery Ajax - How to Detect Network Connection error when making Ajax call

+0

ho assolutamente d'accordo, perché lo stato è una risposta HTTP ricevuta ** ** dal server, in modo da ottenere uno (sia esso 404 o qualsiasi altro) sarebbe una prova che la connettività di rete è OK. –

+0

Penso che tu abbia ragione. Aggiornato la mia risposta. –

1
$.ajax({ cache: false, 
    url: "/Admin/Contents/GetData", 
    data: { accountID: AccountID }, 
    success: function (data) { 
     $('#CityID').html(data); 
    }, 
    error: function (ajaxContext) { 
     if(ajaxContext.status=="404") 
     { 
      //write your not found handler code here 
     } 
     else 
     alert(ajaxContext.status) 
    } 
}); 
+0

Vedo che alcune persone dicono che ci sono tre parametri. Tuttavia, se utilizzo ajaxContext, posso ancora accedere a tutti e tre? – Alan2

+0

si puoi ancora usare. dal perché li useresti – Rab

+0

Sto cercando di capire se questi tre sono diversi per jqXHDR, textStatus e errorThrown. – Alan2

2

Secondo la jQuery docu la funzione di errore riceve tre argomenti

  1. jqXHR:
  2. textStatus: una stringa che descrive il tipo di errore che si è verificato
  3. errorThrown: un oggetto di eccezione facoltativo, se uno si è verificato

Inoltre afferma:

valori possibili per il secondo argomento (oltre nullo) sono "timeout", "errore", "interrompere", e "ParserError". Quando si verifica un errore HTTP, errorThrown riceve la parte testuale dello stato HTTP, ad esempio "Non trovato" o "Errore interno del server".

Quindi potresti voler dare un'occhiata al contenuto del secondo terzo parametro.

+0

Ho bisogno di tutti e tre i parametri? Sembra che vengano inviati anche se io uso solo ajaxContext. In questo modo ottengo ajaxContext.readyState, ajaxContext.Status e ajaxContext.StatusText – Alan2

+0

@Gemma In JS non è necessario acquisire tutti gli argomenti di una funzione. Solo l'ordine degli argomenti è importante.Quindi, se si specificano due parametri nell'intestazione della funzione, solo quelli saranno riempiti e il terzo verrà eliminato. (Ci sono mezzi per accedere a tutti gli argomenti di una funzione indipendentemente da quanti sono stati definiti, però, ma qui non sono necessari) – Sirko

+0

@Sirko ha quasi ragione: guarda il secondo argomento. Se nullo, ** puoi ** dire per certo ** non c'era NESSUN problema di connettività di rete ** e il 3 ° argomento è lo stato HTTP inviato dal server. Se non è null, non penso che sarai in grado di dire con certezza: "timeout" e "error" sono ** indizi per la connettività di rete down **, ma non sono una prova definitiva (potrebbe essere un ritardo di rete o anche un ritardo del server). "parsererror" è un indizio per una risposta ricevuta in qualche modo, quindi una rete piuttosto operativa. Ma la risposta potrebbe essere stata danneggiata a causa di problemi di rete ... E "abortire" potrebbe essere causa dell'utente. O no. –

Problemi correlati