Подтвердить что ты не робот

IE, альтернативный window.stop() (отменить все ожидающие запросы)

Я ищу альтернативу window.stop() для IE. Я попытался document.execCommand( "Стоп" ), но он не работает. Я пытаюсь отменить XMLHttpRequest, который вызывается из пользовательского элемента управления ASP, который я использую. Я не могу использовать jQuery.abort(), так как я не устанавливаю запрос самостоятельно.

4b9b3361

Ответ 1

Я предполагаю, что на странице управления используется jQuery.ajax, и вы знаете, когда вам нужно отменить запрос по вашим критериям.

Как насчет чего-то подобного?

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

Теперь у вас есть переменная с именем xhr, которая содержит базовый объект xmlhttp. Вы можете вызвать abort() на объекте, когда вам нужно.

Возврат - это то, что переменная будет заполнена для каждого запроса ajax, выполняемого jQuery, и я бы включил этот script только на этой странице, возможно даже reset ajax, когда вы закончите.

Я не пробовал это, просто идея, так как я все время издевался над ajax-звонками. Некоторые могут подумать, что этот подход немного радикален!

Надеюсь, вы сочтете это полезным.

Ответ 2

Если у вас есть доступ к объекту, вы можете сделать это с помощью объекта abort() и обработчика события onreadystatechange. Вот рабочий пример, который я переделал из 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>

Как вы можете видеть, текст запроса не загружен, потому что он прерывается.

Ответ 3

Я понимаю, что вы не задаете запрос самостоятельно, но имеете ли вы какой-либо доступ к нему, чтобы вы могли использовать onreadystatechanged-event в javascript? Если это так, вы можете определить, нужно ли вам отменить событие.