2010-11-05 13 views
8

Cómo llamar a los estados listos para Ajax en el método jQuery $.ajax?

+4

¿Para qué? '$ .ajax' trae sus propias devoluciones de llamada' 'success' /' error'/'complete', deberían servir todas sus necesidades –

+0

Hola, quiero readyState = 1 y readyState = 4 ¿cuáles son las equivalencias con jQuery? – tetris

Respuesta

4

$.ajax() devuelve el objeto XMLHttpRequest, por lo que si realmente desea acceder a él como los cambios de estado, se puede hacer esto:

var xhr = $.ajax({ ... }); 
xhr.onreadystatechange = function() { alert(xhr.readyState); }; 

Pero las devoluciones de llamada incorporados deben ser todo lo que necesita para la mayoría usos, particularmente success y complete.

para hacer las cosas antes de los disparos de solicitud, utilice beforeSend, o más apropiadamente para la mayoría de los casos, los .ajaxStart() y .ajaxStop() eventos ... por ejemplo, para mostrar un mensaje de carga cada vez que cualquier actividad Ajax está pasando.

+0

Gracias, comprobaré esto. – tetris

+0

Nota: Este código funciona solo hasta que jQuery 1.4.4 como con 1.5 el módulo ajax ha sido completamente reescrito. No conozco una solución en las versiones recientes (quiero probar el tiempo de latencia). – mgutt

+0

¿No tendría esto una * Condición de carrera * - O - ¿jQuery usa una promesa? – Cody

1

Usted debe ser capaz de conseguir todo lo que necesita mediante el establecimiento de llamadas para las success, error, y complete opciones 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.

+0

Lo que busco es el readyState, como cuando usas Js simples, usas este readyState para escribir algo como "cargando ..." justo antes de que se llene tu marcado, jQuery éxito, error o completo no parece trabajo para lo que quiero. ¿O solo tienes que fingir con jQuery? – tetris

+0

@tada El método jQuery abstrae las formas antiguas de verificar los cambios de estado preparado. ¿Por qué no solo muestra el cuadro de diálogo de carga antes de hacer la llamada ajax y ocultarlo en las funciones de devolución de llamada? Esto es lo que hago y lógicamente tiene mucho más sentido que la manera simple de JS. – treeface

+0

Bien, gracias .__ – tetris

4

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 se convierte en readyState1 (conectado), que, en mi caso, era útil en la aplicación de sondeo largo "push "notificaciones con jQuery.