jQuery $ .ajax y readyStates
-
29-09-2019 - |
Pregunta
Cómo llamar a los estados listos Ajax en el método $.ajax
jQuery?
Solución
$.ajax()
devuelve el objeto XMLHttpRequest, por lo que si realmente desee acceder a ella como los cambios de estado, se puede hacer esto:
var xhr = $.ajax({ ... });
xhr.onreadystatechange = function() { alert(xhr.readyState); };
Pero la incorporada en las devoluciones de llamada debe ser todo lo que necesita para la mayoría de usos, particularmente success
y complete
.
Para hacer las cosas antes de los disparos de solicitud, el uso beforeSend
, o más apropiadamente para la mayoría de los casos, el .ajaxStart()
y .ajaxStop()
eventos ... por ejemplo para mostrar un mensaje de carga cada vez que cualquier actividad Ajax está pasando.
Otros consejos
Método, probado con jQuery 2.0.2:
$.ajax({
beforeSend: function (jqXHR, settings) {
var self = this;
var xhr = settings.xhr;
settings.xhr = function () {
var output = xhr();
output.onreadystatechange = function () {
if (typeof(self.readyStateChanged) == "function") {
self.readyStateChanged(this);
}
};
return output;
};
},
readyStateChanged: function (xhr) {
if (xhr.readyState == 1) {
/* Connected! Do something */
}
},
url: "..."
});
Básicamente, lo que necesitaba era una devolución de llamada después de readyState
convierte 1
(conectado), que, en mi caso, era útil en la aplicación de sondeo largo notificaciones "push" con jQuery.
debería ser capaz de conseguir todo lo que necesita mediante el establecimiento de llamadas para las success
, error
y opciones complete
en el objeto se pasa al método ajax()
. Echar un vistazo a la documentación:
http://api.jquery.com/jQuery.ajax/
Básicamente, funciona así:
$.ajax({
url: 'ajax/test.html',
success: function(data) {
alert('Load was performed.');
},
error: function() {alert("error occurred.")},
complete: function() {alert("ajax complete.")}
});
Se puede ver la documentación de exactamente qué parámetros se tiene acceso a las funciones de devolución de llamada.