2011-03-28 13 views
5

¿cómo puedo saber los estados listos de una solicitud de ajax a través de jquery? En general, sin necesidad de utilizar jQuery, vamos a enviar una petición AJAX como esta:Cómo obtener Jquery Ajax Readystates

http.open("POST", url, true); 

http.onreadystatechange = function() { 
    if(http.readyState == 4 && http.status == 200) { 
     // do something 
    } 
} 

para que yo pueda seguir fácilmente el valor readystate de 1 a 4 utilizando el código anterior, y llevar a cabo las acciones necesarias como mostrar un icono de carga cuando readystate es 1.

Pero a través de una llamada de jquery ajax, ¿cómo puedo rastrear los valores de estado real?

estoy haciendo una llamada AJAX a través de jQuery como esto:

$.post('ajax/test.html', function(data) { 
    $('.result').html(data); 
}); 

Respuesta

11

Tener un vistazo a la documentación de $.ajax. Usted tiene la posibilidad de pasar diferentes devoluciones de llamada (quizás no para "estado listo" Evert, pero es suficiente para que un indicador):

beforeSend(jqXHR, settings)Función
Una función de devolución de llamada pre-solicitud que se puede utilizar para modificar el objeto jqXHR (en jQuery 1.4.x, XMLHTTPRequest) antes de enviarlo. Use esto para establecer encabezados personalizados, etc. Los mapas jqXHR y settings se pasan como argumentos. Este es un Evento Ajax. Si devuelve false en la función beforeSend, se cancelará la solicitud. A partir de jQuery 1.5, se llamará a la opción beforeSend independientemente del tipo de solicitud.

success(data, textStatus, jqXHR)función, arreglo
Una función que se llamará si la petición tiene éxito. La función recibe tres argumentos: data devuelto desde el servidor, formateado según el parámetro dataType; una cadena que describe el estado; y el objeto jqXHR (en jQuery 1.4.x, XMLHttpRequest). A partir de jQuery 1.5, la configuración de éxito puede aceptar una serie de funciones. Cada función se llamará a su vez. Este es un Ajax Event.

error(jqXHR, textStatus, errorThrown)Función
Una función que se llamará si la petición falla. La función recibe tres argumentos: el objeto jqXHR (en jQuery 1.4.x, XMLHttpRequest), una cadena que describe el tipo de error que ocurrió y un objeto de excepción opcional, si se produjo. Los valores posibles para el segundo argumento (además de null) son "timeout", "error", "abort" y "parsererror". Este es un Ajax Event. A partir de jQuery 1.5, la configuración error puede aceptar una serie de funciones. Cada función se llamará a su vez. Nota: Este controlador no se llama para secuencias de comandos entre dominios y solicitudes JSONP.

complete(jqXHR, textStatus)Función, Array
Una función que se llamará cuando (se ejecutan después de success y error devoluciones de llamada) los acabados de petición. La función se pasa dos argumentos: el jqXHR (en jQuery 1.4.x, XMLHTTPRequest) de objetos y una cadena categorizar el estado de la solicitud ("success", "notmodified", "error", "timeout", "abort", o "parsererror"). A partir de jQuery 1.5, la configuración complete puede aceptar una matriz de funciones. Cada función se llamará a su vez. Este es un Ajax Event.

Así que la mejor idea sería mostrar el indicador en la devolución de llamada se pasa a beforeSend y esconderlo en complete.


Ejemplo:

por lo que tendría que volver a escribir el código como:

$.ajax({ 
    url: 'ajax/test.html', 
    type: 'POST', 
    beforeSend: function() { 
     // show indicator 
    }, 
    complete: function() { 
     // hide indicator 
    }, 
    success: function(data) { 
     $('.result').html(data); 
    } 
}); 

aunque yo no entiendo por qué se utiliza POST como su no están enviando los datos (al menos en tu código de ejemplo).

+0

Gracias por su respuesta, ¿puede publicar un ejemplo de cómo usarlo en mi llamada de jquery POST de muestra mencionada en mi pregunta? –

+1

@dskanth: agregué un ejemplo. –

+0

Gracias, en realidad tengo que enviar algunos parámetros por correo, pero no los incluí en este ejemplo. –

1

uso

$.ajax({ 
url:, 
success:function(){ 

}//This is ready state 4 
}); 

perform necessary action like showing a loading icon when readystate is 1.

para que usted pueda utilizar ajaxStart y ajaxStop

+3

Esto le dice solo a Readystate 4, ¿qué ocurre con otros estados? –