jquery ajax метод загрузки: только один запрос для нескольких элементов? - PullRequest
1 голос
/ 18 февраля 2011

Эй, У меня есть 10 элементов ul.rating на моей странице. Я хочу обновлять эти элементы каждую минуту.

var reload = 60000;
var currentpage = window.location;
setInterval(function() {

    $('ul.ratings').load(currentpage + " .ul.ratings >*", function() {
        //callback
    });

}, reload);

Теперь у меня есть две следующие проблемы.

  1. Мне нужно найти, чтобы перезагрузить каждый новый элемент. Сейчас я, вероятно, перезагружаю элемент SAME ul.ratings для всех элементов ul.ratings на моей странице. Поэтому должен быть какой-то способ использовать index () или другой метод jquery для перезагрузки первого элемента ul.ratings с первым элементом ul.ratings и перезагрузки пятого элемента ul.ratings с пятым элементом ul.ratings.

  2. Все это, вероятно, довольно плохой способ сделать это, но я думаю, в моем случае нет лучшего способа. Можно ли сделать метод загрузки только ОДИН РАЗ, захватить каждый элемент ul.ratings и заменить правильный? Прямо сейчас я выполняю загрузочные вызовы, если на моей странице есть 10 элементов ul.ratings.

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

У вас есть контроль над URL, который вы звоните?Можете ли вы заставить его возвращать только те данные, которые вам нужны?В этом случае, пусть он возвращает JSON или XML и перезагружает ваш ul с этой информацией.

В противном случае вы можете использовать функцию $ .get, загрузить HTML в jquery и найти ul самостоятельно:

var ulorigs = $('ul.ratings');
$.get('url', function (data) { 
  var content = $(data);
  $('ul.ratings', content).each(function(ind,elem) {
    $(ulorigs.get(0)).html($(elem).html());
  });
});

Я сам не запускал этот код.

0 голосов
/ 19 февраля 2011

У меня нет страницы, чтобы попробовать это на себе, но предположительно:

var reload = 60000;
var currentpage = window.location;

setInterval(function() {

    $('ul.ratings').each(function(i, el) {
        $(this).load(currentpage + " ul.ratings:eq(" + i + ") > li", function() {
            //callback
        });

    });
}, reload);

Я думаю, что вашей основной проблемой не является учет таргетинга на КОТОРЫЙ контент, который вы заменяете.

Это, вероятно, довольно враждебная идея, потому что в конечном итоге вы говорите о том, чтобы запустить это десять раз и асинхронно загрузить страницу 10 раз.

Полагаю, это означает, что всегда есть:

$("body").load(currentpage + " body > *")

;)

...