Digamos que tengo el siguiente AJAX de jQuery llamada:

$.ajax({
   type: "POST",
   url: "MyUrl",
   data: "val1=test",
   success: function(result){
        //Do stuff
   }
 });

Ahora, cuando esta llamada de AJAX hecho quiero el código del lado del servidor para ejecutar a través de un par de error en el manejo de cheques (por ejemplo, el usuario sigue conectado, disponen de permiso para el uso de la presente convocatoria, los datos válidos, etc). Si se detecta un error, ¿cómo puedo burbuja que mensaje de error de vuelta hasta el lado del cliente?

Mi primer pensamiento sería para devolver un objeto JSON con dos campos: el error y la errorMessage. Estos campos, a continuación, ser revisado en el AJAX de jQuery llamada:

$.ajax({
   type: "POST",
   url: "MyUrl",
   data: "val1=test",
   success: function(result){
       if (result.error == "true") 
       {
           alert("An error occurred: " & result.errorMessage);
       }
       else 
       {
           //Do stuff
       }
   }
 });

Esto se siente un poco torpe para mí, pero funciona. Hay una alternativa mejor?

InformationsquelleAutor Kevin Pang | 2009-01-02

5 Comentarios

  1. 25

    Personalmente, tengo un código similar al siguiente código en mi biblioteca.

    $.ajaxSetup({
        error: function(xhr){
            alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText);
        }
    });

    jQuery docs Ajax/jQuery.ajaxSetup

    La mejor forma de burbuja que de error del lado del servidor (usando php) para el lado del cliente es enviar un encabezado a través de la petición Ajax en algún lugar en los 400 (que es siempre asociados con los errores). Una vez que la petición Ajax recibe este se activará la función de error. Esto también significa que usted no tiene que definir un error: llamada en cada $.llamada ajax.

    header('HTTP/1.0 419 Custom Error');

    Cita de w3.org información de encabezado

    Error 4xx, 5xx
    El 4xx códigos están diseñados para casos en los que el cliente parece haber errado, y el 5xx códigos para los casos en los que el servidor es consciente de que el servidor se ha equivocado. Es imposible distinguir estos casos, en general, por lo que la diferencia es sólo informativo.
    La sección del cuerpo puede contener un documento que describe el error en forma legible por los humanos. El documento está en formato MIME, y sólo puede ser en texto sin formato, texto/html o uno de los formatos especificados como aceptable en la solicitud.

  2. 5
    $.ajax({
       type: "POST",
       url: "MyUrl",
       data: "val1=test",
       success: function(result){
            //Do stuff
       },
       error: function(request,status,errorThrown) {
            //There's been an error, do something with it!
            //Only use status and errorThrown.
            //Chances are request will not have anything in it.
       }
     });
    • Para mí, el estado es siempre «error» y errorThrown siempre es indefinido. ¿Cómo se puede conseguir cualquier información interesante de aquí?
    • Ver: api.jquery.com/jQuery.ajax, error
    • También tenga en cuenta que request.status contiene el código de error.
    • Realmente, el OP tenía la idea correcta. Si su respuesta 200/resultado va a contener un mensaje de error, la única forma de alerta es en el éxito de la función. A veces tendrás que hacer msg = JSON.parse(response) antes de la if (msg.errors) { do an alert } poco, luego else { \\do the thing }. Incluso tratando de otra forma (identificador de mensaje.éxito de la primera) parece dar problemas (por la alerta de no aparecerá hasta que el usuario hace clic en algo más en la página).
  3. 3

    No la función ajax de jQuery aceptar un parámetro más en el final, una devolución de llamada de error de llamadas? Si es así, sólo tiene que añadir un fail:function(...){..} tras el éxito de devolución de llamada.

    • Creo que también hay uno para «error».
    • Sí, hay un «error» de devolución de llamada que funciona de la misma forma en que el «éxito» de devolución de llamada que hace. Sin embargo, yo no estaba seguro de si devuelve un error HTTP fue el mejor enfoque aquí.
    • Mientras usted toma el cuidado de el error en el lado del servidor (tala de árboles, etc), no hay ningún problema en el envío para el cliente, de modo que puede manejar así.
  4. 0

    Devolver un código de error en el lado del servidor utilizando el error de HTTP el mejor equivale a lo que el error es. A continuación, utilizar el error de devolución de llamada. Esto también le permitirá mostrar los errores dada por el servidor web.

  5. 0

    Es muy tarde para responder a esta pregunta, pero creo Que va a ser beneficioso para algunos uno con es6 y jquery 2.2.

    Me suelen seguir este (diferido enfoque), en mi código

    sendAjaxRequest(URL, dataToSend) {
        return $.ajax({
            type        : 'POST',
            url         : URL,
            data        : JSON.stringify(dataToSend),
            dataType    : 'json'
        }).fail((responseData) => {
            if (responseData.responseCode) {
                console.error(responseData.responseCode);
            }
        });
    },

    He adjuntado un diferidos fail método que será llamado si se produce algún error. Es una alternativa para construir el error de la opción de devolución de llamada, la .fail() método sustituye al obsoleto .error() en el método más reciente de jquery.

    Siguiente desde el lugar de llamar a sendAjaxRequest yo uso then jquery promesa de devolución de llamada

    sendAjaxRequest(URL, dataToSend)
    .then(
         (success) => {
         },
         (error) => {
         }
    );

    Se hará un llamado de éxito o error de función que se basa en la respuesta recibida desde el servidor.

Dejar respuesta

Please enter your comment!
Please enter your name here