2012-06-07 12 views
5

Tengo el siguiente:¿Cómo puedo obtener información de vuelta de una llamada Ajax cuando la conectividad a Internet se pierde

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

cuando pierda la conectividad a Internet, el error se llama, pero no veo nada en el responseText.

¿Hay alguna manera de descubrir diferentes tipos de errores según la información de estado en el ajaxContent devuelto? Realmente me gustaría poder emitir un mensaje que diga "Se perdió la conexión a Internet" y otro mensaje si hay algún otro problema.

Respuesta

1

Actualizado.

Solo debe agregar: timeout:, en algún lugar dentro de $ .ajax ({}). Además, el caché: falso, podría ayudar en algunos escenarios.

$ .ajax está bien documentado, debe comprobar las opciones allí, puede encontrar algo útil.

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

+0

Estoy muy en desacuerdo, ya que un estado es una respuesta HTTP recibida desde el servidor ** **, así que conseguir uno (ya sea 404 o cualquier otro) sería una prueba de conectividad de red está bien. –

+0

Creo que tienes razón. Actualizado mi respuesta. –

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

Veo que algunas personas dicen que hay tres parámetros. Sin embargo, si uso ajaxContext, ¿puedo acceder a los tres? – Alan2

+0

sí aún puede usar. por qué los usarías – Rab

+0

Estoy tratando de entender si estos tres son diferentes para jqXHDR, textStatus y errorThrown. – Alan2

2

Según la jQuery docu la función de error recibe tres argumentos:

  1. jqXHR:
  2. textStatus: una cadena que describe el tipo de error que se produjo
  3. errorThrown: un objeto de excepción opcional, si ocurrió uno

Además se afirma:

Los valores posibles para el segundo argumento (además nula) son "tiempo de espera", "error", "abortar", y "parsererror". Cuando se produce un error HTTP, errorThrown recibe la parte textual del estado HTTP, como "No encontrado" o "Error interno del servidor".

Así que es posible que desee echar un vistazo al contenido del segundo y tercer parámetro.

+0

¿Necesito los tres parámetros? Parece que también se envían si solo uso el ajaxContext. En eso obtengo ajaxContext.readyState, ajaxContext.Status y ajaxContext.StatusText – Alan2

+0

@Gemma En JS no es necesario que capture todos los argumentos de una función. Solo el orden de los argumentos es importante.Por lo tanto, si especifica dos parámetros en el encabezado de su función, solo se rellenarán y el tercero se descartará. (Sin embargo, existen medios para acceder a todos los argumentos de una función independientemente de cuántos se definieron, pero no se necesitan aquí) – Sirko

+0

@Sirko es casi correcto: vea el segundo argumento. Si es nulo, ** puede decir ** con seguridad ** no hubo ningún problema de conectividad de red **, y el tercer argumento es el estado HTTP enviado por el servidor. Si no es nulo, no creo que pueda decirlo con certeza: "timeout" y "error" son ** pistas para la conectividad de red baja **, pero no son una prueba definitiva (podría ser un retraso de la red o incluso un retraso del servidor)) "parsererror" es la clave para una respuesta recibida de alguna manera, por lo tanto, una red bastante operativa. Pero la respuesta podría haberse corrompido también por problemas de red ... Y "abortar" podría deberse al usuario. O no. –

Cuestiones relacionadas