从ajax请求中替换或管理json数据

时间:2009-02-11 01:01:31

标签: javascript jquery json

我有一个页面发出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+'');
            $.each(birthDates[date], function(){
            $('ul#'+date).append(''+this.name+'');
            });
         }

$('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对象获得任何扩展的用户数据。 (点击之后我做的事情

有什么想法吗?我这样做有效吗? 我觉得奇怪的是你无法清空你创造的物体,但显然我正在读的所有东西都说你不能。

加成

好吧,在发布之后,我接下来要做的就是构建一个依赖于返回的json的动态标签云。 所以,现在我又遇到了同样的问题。我需要在每次请求后将标记云标记为新的。我真的希望有一种方法可以摆脱javascript中的“遗留”数据。

谢谢, 皮特

1 个答案:

答案 0 :(得分:1)

每次调用函数时,将使用函数(数据)中的var关键字声明的所有内容都将重新创建。

你问题的症状是什么?你真的看过firebug中uids变量的值,看到项目是重复的,还是只看到你的日期/名字在页面上翻了一倍?

我怀疑这是因为在显示结果之前没有清除你正在调用.adpend()的DOM元素。

尝试添加到函数的开头:

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

以及日期显示循环:

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

并且为了更好的衡量,在功能开始时:

$('li.show').unbind('click');