замена или управление данными JSON из запроса AJAX - PullRequest
1 голос
/ 11 февраля 2009

У меня есть страница, которая делает запрос ajax и возвращает данные в формате json.

Мне нужно было отсортировать эти данные перед добавлением их в DOM, чтобы они помещались в объект со следующим кодом

  function(data){

            var birthDates={};
            var uids={};
          $.each(data.users, function(){

          if(!uids[this.uid]){
                uids[this.uid] = [];
                uids[this.uid].push(this);
            }
            if(!birthDates[this.birthDate])
                     birthDates[this.birthDate] = [];        
                birthDates[this.birthDate].push(this);
           });
         for(var d in birthDates){
            var date=d;
            $('div#holdDates').append(''+date+'</li>');
            $.each(birthDates[date], function(){
            $('ul#'+date).append(''+this.name+'</li>');
            });
         }

$('li.show').click(function(){
  var getuid=$(this).attr('id');
        $showArr=uids[getuid];
// now I can get the extended data about the user

все это прекрасно работает, когда страница загружается в первый раз, однако я сталкиваюсь с двумя проблемами, обе в результате выполнения второго запроса AJAX 1) если я сделаю один и тот же запрос AJAX (давая те же переменные, чтобы те же данные вернулись снова), то данные будут добавлены во вновь созданные объекты (uids и birthDates) дважды, и я не могу понять, как сохранить это как уникальный 2) иногда (и я не смог отладить, чтобы выяснить, почему), я не получаю никаких расширенных пользовательских данных от объекта uids. (то, что я делаю после щелчка

Есть идеи? Я делаю это эффективно? Мне кажется странным, что вы не можете очистить созданный вами объект, но, очевидно, все, что я читаю, говорит о том, что вы не можете.

Добавление * * +1010 Что ж, после публикации этого сообщения я собирался создать облако динамических тегов, которое зависит от возвращаемого json. Итак, теперь я снова столкнулся с той же проблемой. Мне нужно, чтобы облако тегов было новым после каждого запроса. Я действительно надеюсь, что есть способ избавиться от «устаревших» данных в javascript. Спасибо, Пит

1 Ответ

1 голос
/ 15 февраля 2009

Все, что объявлено с ключевым словом var внутри вашей функции (data), будет создаваться заново при каждом вызове функции.

Каков симптом вашей проблемы? Вы действительно смотрели на значение переменной uids в firebug и видели, что элементы дублируются, или вы просто видите, как ваши даты / имена удваиваются на странице?

Я подозреваю, что это результат не очистки элементов DOM, для которых вы вызываете .append (), перед тем, как отобразить результаты.

Попробуйте добавить в начало функции:

$('div#holdDates').empty();

, а также ваш цикл отображения даты:

$('ul#'+date).empty();

и для хорошей меры, в начале функции:

$('li.show').unbind('click');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...