Me gustaría saber si es necesario usar la función de manejo de errores de llamada ajax en el ejemplo mencionado a continuación si ya utilicé la declaración "if-else":

Mi modelo:

 if ($query && $query->num_rows() > 0) {

        return $query->result();
    } else {
        return false;
    }    

Mi controlador:

if ($this->model_users->did_get_data($user_id)) {

            $data["results"]= $this->model_users->did_get_data($user_id);           
            echo json_encode($data);            
        }
        else {      
        $data = array(
                    'message' => "Could not find any posts."
                     );
            echo json_encode($data);

        }

Mi archivo JS:

$.get('controller/get_data', function (data) {
        if (data.message !== undefined) {
            $( "#data_is_not_got").text(data.message);
        } else {

           //displaying posts               

        }
    }, "json");
0
EducateYourself 4 sep. 2014 a las 21:31

2 respuestas

La mejor respuesta

Sí, aún debe agregar un controlador de errores a la llamada AJAX. Eso le permitirá manejar con gracia cualquier número de posibles problemas que puedan ocurrir con la llamada que su declaración if / else no cubre: no se puede conectar al servidor, error interno del servidor, etc.

1
dmccabe 4 sep. 2014 a las 17:38

Esto depende de lo que le pueda pasar a su controlador.

Si está absolutamente seguro de que no puede haber ningún error 404 o no habrá ningún error de tiempo de espera, puede trabajar sin la función de manejo de errores. Pero como estoy seguro de que no puedes decir que es 100% seguro, diría que tienes que implementarlo;)

Pero aquí está mi consejo: si usa llamadas AJAX más de una vez, cree su propia "API AJAX", que solo usa una devolución de llamada donde puede usar un parámetro de estado para decirle a la devolución de llamada si todo está bien o no, de hecho, solo usted tiene que usar una declaración if-else.

Este es un breve ejemplo de uno de mis métodos para tratar con un backend de PHP:

ajax = function (callback) {
    $.ajax({
        // whatever you need here
        success: function (response) {
            if (typeof callback == "function") {
                callback(true, response);
            }
        },
        error: function (e) {
            if (typeof callback == "function") {
                if (e.statusText == "timeout") {
                    callback(false, {"timeout": true})
                } else {
                    try {
                        JSON.parse(e.responseText)

                        // if try is successfull, there is no fatal-error (which would exit the PHP, so no JSON)
                        callback(false, {})
                    } catch (x) {
                        // only maximum-execution-time-errors are fatal errors :P
                        if (e.responseText.indexOf('<b>Fatal error</b>') != -1) {
                            callback(false, {"timeout": true})
                        }
                    }
                }
            }
        },
    })
}
1
hffmr 4 sep. 2014 a las 17:45