2011-11-15 50 views
14

He estado revisando para asegurarse de que mis peticiones AJAX tienen éxito al hacer algo como esto:mejor manera de comprobar si la petición AJAX tuvo éxito en jQuery

$.post("page.php", {data: stuff}, function(data, status) { 
    if(status == "success") { 
     //Code here 
    } 
    else { 
     //Error handling stuff 
    } 
}); 

está comprobando la variable de estado el mejor camino a seguir acerca de hacer esto, o hay una mejor manera de asegurarse de que la solicitud se haya realizado realmente? Estoy considerando una solicitud "exitosa" para que sea una solicitud que llegue a la página en la que estoy publicando sin agotar el tiempo (si el servidor no funcionó y se realizó una solicitud AJAX justo antes de que desapareciera como ejemplo) o devolviendo cualquier tipo de error 404 o 500.

+4

¿Qué considera exitoso? ¿Que la conexión se realizó y se devolvieron los datos, o que la secuencia de comandos en su servidor realmente hizo lo que usted quería que hiciera? Dependiendo de su uso, es posible que deba verificar la respuesta real también. – Brad

+0

Editado mi pregunta para explicar lo que considero exitoso – Aaron

Respuesta

27

Al llamar al $.post de esa manera, pasará automáticamente solo en una función success handler.

Si algo en la solicitud salió mal, este método ni siquiera se ejecuta.

Para tener más control, use $.ajax() directamente o pase los controladores de errores. Eso podría parecerse a

$.post("page.php", {data: stuff}, function(data, status) { 
    // we're fine here 
}).fail(function(err, status) { 
    // something went wrong, check err and status 
}); 

Lo mismo usando .ajax():

$.ajax({ 
    type: 'POST', 
    url: 'page.php', 
    data: stuff, 
    success: function(data) { 
    }, 
    error: function(xhr, status, error) { 
     // check status && error 
    }, 
    dataType: 'text' 
}); 

incluso se puede pasar controlador de eventos más ajax a $.ajax, como beforeSend para modificar/leer los encabezados XHR o complete tener un manejador de los cuales dispara de cualquier manera (error o no) cuando terminaron las solicitudes.

+0

Funciona muy bien para el manejo de errores de parámetros faltantes para mí (método .post) ... gracias jAndy. –

1

jQuery considera "exitoso" en la forma en que está en el código fuente, por supuesto. Esto no incluye un código de estado de 404/500 y tampoco un tiempo de espera, ya que no se ha devuelto ningún código de estado en ese caso.

Puede comprobar en qué momento se vuelve "success":

// If successful, handle type chaining 
if (status >= 200 && status < 300 || status === 304) { 

... 
    // If not modified 
    if (status === 304) { 

     statusText = "notmodified"; 
... 

    // If we have data 
    } else { 

     try { 
... 
      statusText = "success"; // So: only when status code is in 
            // the range 200 <= x < 300 
... 
     } catch(e) { 
... 
      statusText = "parsererror"; 
... 
     } 
    } 
2

Yo prefiero usar la llamada ajax, ya que tiene un controlador de éxito explícita

$.ajax({ 
url: "page.php", 
data: stuff, 
success: function(response){ 
console.log("success"); 
} 
}); 

También me gustaría recomendar el uso de Firebug o ¡webkit similar, entonces puedes rastrear las solicitudes y verificar los parámetros!

Cuestiones relacionadas