Estoy probando el error de devolución de llamada en jQuery, ajax y tengo una pregunta. A continuación es mi petición ajax

$.ajax({
    type:'get',
    url:'non-existant-file.php',
    data: { newFile : $('#name').val() },
    beforeSend: function() {
        //make nice image to show the request is running
    },
    success: function() {
        //show results of successfull request
    },
    error: function(jq,status,message) {
        alert('A jQuery error has occurred. Status: ' + status + ' - Message: ' + message);
    }
});

El archivo no existe, para el único propósito de probar el error que se produce. Yo esperaría que devuelve un 404 como el estado, y «Archivo no encontrado» como mensaje. Al menos, eso es lo que yo entiendo al leer el docs:

Valores posibles para el segundo argumento (además de la nula) son «tiempo de espera», «error», «abortar», y «parsererror». Cuando se produce un error HTTP, errorThrown recibe el texto de parte del estado HTTP, tales como «No Encontrado» o «Internal Server Error». Como de jQuery 1.5, el error de configuración puede aceptar una matriz de funciones. Cada función será llamada en turno.

Pero, el aviso que me sale es nada como lo que yo esperaba:

A jQuery error has occurred. Status: error - Message: undefined

Soy yo la comprensión de los docs mal o solo estoy no haciendo bien?

  • ¿Tienes una página de error en su aplicación en el caso de que la url no existe?
  • Como un predeterminada de la página de error 404? Luego no. Yo no. En el chrome de error de la consola que apenas lanza ‘GET localhost/km/admin/createFile.php?newFile= 404 (No Encontrado)’ que yo habría pensado que es la forma en que el ajax error sería devuelto.
InformationsquelleAutor Albert | 2012-08-22

3 Comentarios

  1. 1

    Creo que tiene que ver con la forma de su servidor de enrutamiento responde a acceder a una ruta que no existe. JSFiddle, por ejemplo, va a volver un poco más útiles mensaje: http://jsfiddle.net/dxSma/

    • Esta parece ser la respuesta más precisa. Yo no sabía esto, y, no es lo que yo esperaba. Gracias por el aporte.
  2. 1

    Yo uso el siguiente para el manejo de errores con el AJAX de jQuery:

    error       : function( xhr ) {
        var readyState = {
            1: "Loading",
            2: "Loaded",
            3: "Interactive",
            4: "Complete"
        };
        if(xhr.readyState !== 0 && xhr.status !== 0 && xhr.responseText !== undefined) {
            alert("readyState: " + readyState[xhr.readyState] + "\n status: " + xhr.status + "\n\n responseText: " + xhr.responseText);
        }
    }

    Tal vez esto le puede dar un par de consejos sobre cómo hacer que funcione correctamente.

    • No dar más información, y mejor estructurado, pero devuelve lo que parece una página. jsfiddle.net/dxSma/1 ¿por Qué hacerla sonido espectacular cuando todo el trabajo que aún queda por hacer a ti mismo?
    • No era mi intención hacerla sonido espectacular, esta función de error de las grandes obras con ASP.NET WebServices al menos – con la correcta responseText.
    • Sé que no fue tu intención. A lo que me refería era, ¿por qué los desarrolladores detrás de jQuery añade una devolución de llamada de error y en la documentación, hacer que suene como todo lo que usted necesitará siempre, sin que eso sea lo que está hecho para ser? No es nada en contra de usted! 😛 Es más una pregunta del millón de dólares.
    • Que, lamentablemente, no tengo una respuesta. Podría muy bien ser la persona a cargo en qué base de que usted está utilizando.
  3. 0

    también se puede trabajar con el «Global Ajax Controladores de Eventos»

    .ajaxError() estoy aquí se muestra el ejemplo y más se puede encontrar en este enlace.

    http://api.jquery.com/ajaxError/

    Mostrar un mensaje cuando una petición Ajax falla.

    jQuery("#msg").ajaxError(function(event, request, settings){
      jQuery(this).append("<li>Error requesting page " + settings.url + "</li>");
    });

    o también puede trabajar como que un ANTIGUO camino 🙂

    jQuery.ajax({
     ...,
    complete: function(e, XHR, options) {
      if (XHR.status == 200) { //success
      } elseif (XHR.status == 500) { //Internal Server Error
      } elseif (XHR.status == 404) { //File Not found
     }
    });
    • no es la segunda parte de mí lo mismo que decir: error: function (xhr) { alert(xhr.url + " could not be found."); } por ejemplo?
    • sí butyou puede escribir mensajes personalizados para código de error concreto por lo que será más factible supongo que probarlo y que me haga saber.

Dejar respuesta

Please enter your comment!
Please enter your name here