2011-10-03 8 views
6

Tengo un conjunto de solicitudes de $.get() que debo refactorizar para incluir una devolución de llamada fallida. Las solicitudes son de la formaComprensión de jqXHR de jQuery

$.get(url, 
     {}, 
     function(data) {//success, do work 
     //work 
     },'json');//or 'html' 

De acuerdo con la API de jQuery, simplemente añadir un objeto jqHXR. Así que en mi caso, creo que debería hacer

var jqxhr = $.get(url, 
      {}, 
      function(data) {//success, do work 
      //work 
      },'json').error(function() { alert("error"); });//or 'html' 

No entiendo la razón de la segunda devolución de llamada en el éxito the example. Supongo que podría estar ahí para configurar una cadena de devolución de llamada. Quiero que el error se ejecute por error y que se ejecute con éxito. Entonces, ¿es esto correcto?

+0

Qué ejemplo de la página? Lo siento, no pude encontrar a qué te refieres. –

+0

se parece a la tercera muestra de código. –

+0

Cuando llegue a la página busque la sección titulada 'El objeto jqXHR'. El ejemplo directamente debajo de ese título es al que me refiero. –

Respuesta

11

Creo que la segunda devolución de llamada de éxito en el ejemplo está ahí sólo para ilustrar que, con esta sintaxis, puede tener varios controladores para success, error, y complete eventos. En el método jQuery .ajax() estándar, solo puede asignar un único controlador a cada uno de estos eventos. No se me ocurre de improviso de un ejemplo que sería requerir varios controladores, pero parece un poco más claro y más como el lenguaje estándar de jQuery para usar

$.get('my_url.php') 
    .success(handlerOne) 
    .success(handlerTwo); 

en lugar de

$.get('my_url.php', function(data, textStatus, jqXHR) { 
    handlerOne(data, textStatus, jqXHR); 
    handlerTwo(data, textStatus, jqXHR); 
}); 

En su caso, sin embargo, podría ser más fácil y más limpio simplemente convertir sus declaraciones $.get() al $.ajax(). La sintaxis $.ajax() es probablemente más familiar para la mayoría de los programadores de jQuery, y ya que no necesita la funcionalidad especial (múltiples controladores, asignación de controlador posterior a la solicitud) disponible en la otra sintaxis, no hay razón para no usar $.ajax():

$.ajax({ 
    url: url, 
    success: function(data) { 
     // success, do work 
    }, 
    error: function(data) { 
     // error, handle failure 
    }, 
    dataType:'json' 
}); 
+0

Estoy de acuerdo, la segunda opción tiene mucho más sentido. –

+3

Encuentro claras explicaciones como la suya tiende a ser rara. La documentación API y los sitios oficiales tienden a entrar en detalles extremos sobre todo, lo cual tiene su lugar, pero no enfatizan la practicidad, o las opciones recomendadas tan claramente. También tienden a dar abstracciones sin ejemplos que cubren suficiente terreno. – ahnbizcad

2

El código que está utilizando debe estar bien. El segundo éxito es simplemente otro lugar donde puedes definir un método de éxito. Algunas personas usan el éxito jqxhr en lugar del que se pasó a $.get(), y otros usan el controlador hecho del objeto diferido para hacer lo mismo.

+0

las múltiples formas de hacer las cosas en javascript, y el silencio implícito en la sintaxis alternativa es la parte más confusa de aprender js para mí. – ahnbizcad

+0

@gwho la mejor solución para eso es ir a la fuente. Muchas veces la documentación simplemente no es suficiente –

+1

La fuente me resulta aún más confusa debido a la meta programación, y por la misma razón las explicaciones de la API son confusas. Creo que buenos ejemplos claros que despojan los detalles, y lo dejan con el núcleo importante y los aspectos más comunes son la manera más fácil de asimilar información. Esa es solo mi opinión.Me parece que si puedes leer la fuente, ya eres lo suficientemente bueno como para no confundirte con la sintaxis múltiple. – ahnbizcad