2012-01-25 13 views

risposta

3

Presumo che il controllo sulla pagina utilizza jQuery.ajax e si sa quando è necessario interrompere la richiesta, secondo i propri criteri.

Che ne dici di qualcosa di simile?

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

Ora si ha una variabile denominata xhr che contiene l'oggetto xmlhttp sottostante. Puoi chiamare abort() sull'oggetto quando è necessario.

Il limite è che variabile sarà popolato per ogni richiesta Ajax fatto da jQuery, e vorrei includere solo questo script su quella determinata pagina, forse anche reimpostare l'Ajax quando si è fatto.

Non ho provato questo, solo un'idea, come sto prendendo in giro chiamate ajax tutto il tempo. Alcuni potrebbero pensare che questo approccio sia un po 'drastico!

Spero che tu trovi utile.

+0

Mi piace il tuo approccio. È esattamente quello che voglio fare. Comunque non sono bravo con jQuery, quindi ho dei problemi. Non sono sicuro che il tuo codice di esempio debba essere eseguito solo una volta e dopo che la variabile xhr debba essere compilata automaticamente per ogni richiesta, o dovrei eseguire il codice ogni volta che voglio caputre una richiesta. Se lo eseguo una volta (inserendo semplicemente il codice nel blocco di script) ho sempre la stessa richiesta con STATUS OK all'interno di xhr. Se inserisco il tuo codice nella funzione in cui desidero annullare le richieste correnti, xhr rimane nullo. Apprezzerei molto il tuo aiuto. Grazie mille :) –

+0

Questo codice dovrebbe essere eseguito una sola volta nel caricamento della pagina, prima di qualsiasi richiesta Ajax. È inoltre necessario fare attenzione all'ambito dell'ambito, si desidera che la variabile su un ambito globale, in modo da poter eliminare l'ambito jQuery e metterlo nell'evento pronto. Di nuovo, per ogni richiesta, quella variabile verrà caricata, e sarà sostituita, quindi è necessario prenderla prima che lo faccia. Spero che tu possa farlo funzionare, sei il benvenuto! Non dimenticare di contrassegnare la mia risposta, se lo fa;) –

+0

Ho bisogno di interrompere la richiesta solo se l'utente lo desidera, quindi ho bisogno di avere la richiesta in sospeso corrente all'interno di una variabile. Quello che ho dentro xhr è una richiesta già completata. Come posso afferrare l'ultima richiesta in sospeso? Grazie per avermi contattato su questo (: –

0

Capisco che non si imposta la richiesta da soli, ma si ha alcun tipo di accesso ad esso, in modo che è possibile utilizzare l'evento onreadystatechanged in javascript? In tal caso, è possibile determinare se è necessario annullare l'evento.

+0

Non riesco a modificare il codice js del controllo utente asp. Se c'è un modo per catturare la creazione o l'attivazione di tale richiesta e quindi allegare qualche tipo di evento, sarebbe grandioso. –

1

Se si ha accesso all'oggetto, è possibile farlo con il gestore di eventi abort() e onreadystatechange. Ecco un esempio di lavoro ho ottimizzato da 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> 

Come si può vedere, il testo richiesta non viene caricata perché viene interrotta.

Problemi correlati