2012-01-25 18 views

Respuesta

3

Supongo que el control en la página usa jQuery.ajax y usted sabe cuándo debe cancelar la solicitud, según sus criterios.

¿Qué tal algo como esto?

(function ($) { 
    var xhr = null, 
     originalAjax = $.ajax, 
     updatedAjax = function (url, options) { 
      xhr = originalAjax(url, options); 
     }; 
    $.ajax = updatedAjax; 
})(jQuery); 

Ahora tiene una variable llamada xhr que contiene el objeto xmlhttp subyacente. Puede llamar a abort() en el objeto cuando lo necesite.

El inconveniente es que la variable se completará para cada solicitud ajax hecha por jQuery, y solo incluiría esta secuencia de comandos en esa página en particular, tal vez incluso reinicie el ajax cuando haya terminado.

No he intentado esto, solo una idea, ya que me he burlado de las llamadas ajax todo el tiempo. ¡Algunos podrían pensar que este enfoque es un poco drástico!

Espero que lo encuentres útil.

+0

Me gusta su enfoque. Es exactamente lo que quiero hacer. Aunque no soy tan bueno con jQuery, entonces estoy teniendo algunos problemas. No estoy seguro de que el código de muestra se ejecute solo una vez y luego la variable xhr se debe completar automáticamente para cada solicitud, o debería ejecutar el código cada vez que desee capturar una solicitud. Si lo ejecuto una vez (simplemente poniendo el código en el bloque de script) siempre tengo la misma solicitud con ESTADO OK dentro de la xhr. Si pongo su código en la función donde quiero abortar las solicitudes actuales, xhr permanece nulo. Realmente agradecería su ayuda. Muchas gracias :) –

+0

Ese código solo debe ejecutarse una vez en la carga de la página, antes de cualquier solicitud de AJAX. También debe tener cuidado con el alcance, quiere la variable en un ámbito global, para que pueda deshacerse del alcance de jquery y ponerlo en el evento listo. De nuevo, para cada solicitud, esa variable se cargará, y se reemplazará, por lo que debe tomar eso antes de que lo haga. Espero que lo hagas funcionar, eres bienvenido! No olvide marcar mi respuesta si lo hace;) –

+0

Necesito abortar la solicitud solo si el usuario así lo desea, así que necesito tener la solicitud actual pendiente dentro de una variable. Lo que tengo dentro de xhr es una solicitud ya completada. ¿Cómo tomo esa última solicitud pendiente? Gracias por acompañarme en esto (: –

0

Entiendo que no establezca la solicitud usted mismo, pero ¿tiene algún tipo de acceso a ella, para que pueda utilizar el evento onreadystategedged en javascript? De ser así, puede determinar si debe cancelar el evento o no.

+0

No puedo cambiar el código js del control de usuario asp. Si hay una manera de capturar la creación o el lanzamiento de dicha solicitud y luego adjuntar algún tipo de evento, sería genial. –

1

Si tiene acceso al objeto, puede hacerlo con el controlador de eventos abort() y el evento onreadystatechange del objeto. Aquí está un ejemplo de trabajo pellizqué de w3schools

<html> 
<head> 
<script type="text/javascript"> 
function loadXMLDoc() 
{ 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==2){ xmlhttp.abort();} 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","xmlhttp_info.txt",true); 
xmlhttp.send(); 
} 
</script> 
</head> 
<body> 

<h2>Using the XMLHttpRequest object</h2> 
<div id="myDiv"></div> 
<button type="button" onclick="loadXMLDoc()">Change Content</button> 

</body> 
</html> 

Como se puede ver, el texto de solicitud no se ha cargado ya que ésta se abortó.

Cuestiones relacionadas