jQuery: запуск события AJAX, локального для элемента, загружающего данные - PullRequest
1 голос
/ 17 августа 2010

Я играл с элементами подписки на события AJAX в jQuery.

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

Итак, я подумал, что было бы неплохо и легко выполнить .show () всякий раз, когда AJAX-запрос завершен, и скрыть его.когда мне нужноЯ хотел бы устранить необходимость неявного .show () элемента каждый раз, когда я делаю запрос AJAX.

В jQuery есть .ajaxSuccess () и .ajaxComplete ().Однако они будут срабатывать при завершении / успешном выполнении любого запроса AJAX, поэтому при загрузке данных в другие части страницы мой скрытый элемент будет .show ().

Решение, по-видимому, (согласно API jQuery).ссылка), чтобы использовать параметр ajaxOptions в вашей функции обработчика событий:

$('.log').ajaxComplete(function(e, xhr, settings) {
  if (settings.url == 'ajax/test.html') {
    $(this).text('Triggered ajaxComplete handler.');
  }
});

Что я не понимаю, так это причина регистрации обработчика событий для всех запросов AJAX к определенному элементу, помимо возможности использовать$ (это).Я что-то упустил, могу ли я зарегистрировать обработчик событий для запроса AJAX, специфичного для элемента?

Если нет, есть ли какая-либо управляемая событиями альтернатива использованию .url?Причина, по которой я спрашиваю, состоит в том, что я широко использую фрагмент страницы для отслеживания состояния страницы, и было бы легче иметь обработчик события .show () для моего элемента всякий раз, когда запрос AJAX загружает в него данные.

EDIT: Postназвание грамматики.

Ответы [ 2 ]

0 голосов
/ 17 августа 2010

Свяжите глобальный обработчик событий с AJAX-запросами, а затем используйте целевой элемент события, чтобы решить показать элементы:

$(document).ajaxSuccess(function (event, xhr, settings) {
    if ($(event.target).is('#main'))
        $('#main').show();
});

Было бы неплохо иметь возможность запускать запросы AJAX, которые нацелены только на определенные элементы, но, похоже, не существует способа.

РЕДАКТИРОВАТЬ: Синтаксис

0 голосов
/ 17 августа 2010

Я думаю, вы хотите что-то вроде этого:

$(document).ajaxComplete(function(e, xhr, settings) {
    if(settings.url == 'ajax/test.html') {
      $('#foo').text('Triggered ajaxComplete handler.');
    } else if(settings.url == 'ajax/another.html') {
      $('#bar').text('Triggered ajaxComplete handler.');
    }
});

Имеет ли это смысл, или я полностью упускаю суть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...