Прерывание jQuery () .load ()

Концепция замыканий может быть объяснена как наличие функций и их контекстов. Контекст - это своего рода хранилище, прикрепленное к функции для разрешения захваченных переменных (например, с именем «закрытие»).

Когда выполняется код примера:

var add = (function () {
    var counter = 0; // This is promoted to the below's function context
    return function () {return counter += 1;}
})();

контекст, где переменная counter продвигается к анонимному контексту функции, таким образом, вы можете получить доступ к этой переменной из текущей области.

Эта диаграмма более или менее объясняет это:

В этом случае X и Y захватываются контекстом функции и который переносится на все исполнения этой функции.

Теперь это только реализация V8 лексических сред .

См. Вячеслав Егоров большое объяснение по поводу закрытие с использованием V8: Гроккинг V8 закрывает для удовольствия (и прибыль?)

25
задан Daniel Situnayake 9 June 2010 в 01:57
поделиться

4 ответа

Вы не можете сделать это с .load() напрямую, так как он возвращает объект jQuery для цепочки, но если вы переключитесь на полный вызов $.ajax() с помощью .html() вы можете, например, так:

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

При этом используется метод .abort() объекта XMLHttpRequest для прерывания загрузки.

36
ответ дан Nick Craver 28 November 2019 в 21:00
поделиться

Ответ Ника был почти тем, что мне было нужно, но не совсем. Я использовал .load (), чтобы загрузить только изображение со страницы. Итак, продолжая ответ Ника ...

Так что вместо ...

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

Я сейчас использую ...

var xhr = $.ajax({
            url: 'mypage.htm',
            success: function(data) {
              $("#myElement").html($(data).find("#myImage"));
            }
          });
//if needed, abort the request later..
xhr.abort();
8
ответ дан Homer 28 November 2019 в 21:00
поделиться

Вы можете сделать это, используя jQuery.ajax вручную. Он вернет объект XMLHttpRequest , который можно вызывать abort при необходимости. В обработчике успеха вы можете использовать jQuery.html

1
ответ дан Matthew Flaschen 28 November 2019 в 21:00
поделиться
$("#myElement").load("/mypage #mayImage", function(response, status, xhr) {
  if (status == "error") {
     xhr.abort();
  }
});

Должно работать так ..

или по другому событию, я отправляю подтверждение на длинное поле, пользователь меняет содержимое, я хочу прекратить предыдущую проверку для повторной проверки:

xhr.abort();

$("#myElement").load("/mypage #mayImage", function(response, status, xhr) {
  if (status == "error") {
    xhr.abort();
  }
});
1
ответ дан Zuul 28 November 2019 в 21:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: