2010-06-09 24 views
25

La función .load() de la biblioteca jQuery le permite cargar elementos selectivamente desde otra página (sujeto a ciertas reglas). Me gustaría saber si es posible abortar el proceso de carga.Anulando jQuery(). Load()

En nuestra aplicación, un usuario puede navegar por una lista de elementos. Pueden optar por hacer clic en un botón que carga y muestra información adicional sobre un elemento de otro documento (lo que puede llevar algo de tiempo). Si eligen un elemento diferente en la lista mientras todavía está ocurriendo un .load(), me gustaría que la carga se interrumpa.

¿Esto es posible? ¿Vale la pena? ¿Algunas ideas?

Dan

Respuesta

34

No se puede hacer esto con .load() directamente, ya que devuelve el objeto jQuery para encadenar, pero si cambia a la llamada $.ajax() completa con .html() se puede, de esta manera:

var xhr = $.ajax({ 
      url: 'mypage.htm', 
      success: function(data) { 
       $("#myElement").html(data); 
      } 
      }); 
//if needed, abort the request later.. 
xhr.abort(); 

Esto usa .abort() method on the XMLHttpRequest object para cancelar la carga.

+0

Respuesta perfecta; Gracias. –

+0

+1 gracias buena respuesta – gray

1

Usted puede hacer esto mediante el uso de jQuery.ajax manualmente. Devolverá un objeto XMLHttpRequest, que puede llamar al abort según sea necesario. En el controlador de éxito, puede utilizar jQuery.html

8

La respuesta de Nick era casi lo que necesitaba, pero no del todo. Estaba usando .load() para cargar solo una imagen de una página. Por lo tanto, la ampliación de la respuesta de Nick ...

Así que en lugar de ...

$('#myElement').load('mypage.htm #myImage'); 

Ahora estoy usando ...

var xhr = $.ajax({ 
      url: 'mypage.htm', 
      success: function(data) { 
       $("#myElement").html($(data).find("#myImage")); 
      } 
      }); 
//if needed, abort the request later.. 
xhr.abort(); 
+0

esto no funciona para mí ... Creo que el problema es el .find ... ¿hay otras opciones que pueda explorar para agarrar un div específico ... sin usar .load – justcode

+0

hace el '$ .ajax' datos de retorno para usted? – Homer

+0

sí lo hace si simplemente doy $ ("# myElement"). Html (datos) ... pero cuando agrego .find ... no se devuelve nada y estoy seguro de que la llamada fue exitosa. – justcode

1
$("#myElement").load("/mypage #mayImage", function(response, status, xhr) { 
    if (status == "error") { 
    xhr.abort(); 
    } 
}); 

deben trabajar de esta manera.

o en otro evento, envío una verificación en un campo largo, el usuario cambia el contenido, quiero detener el cheque anterior para volver a verificar:

xhr.abort(); 

$("#myElement").load("/mypage #mayImage", function(response, status, xhr) { 
    if (status == "error") { 
    xhr.abort(); 
    } 
});