我有一个页面发出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中的“遗留”数据。
谢谢, 皮特
答案 0 :(得分:1)
每次调用函数时,将使用函数(数据)中的var关键字声明的所有内容都将重新创建。
你问题的症状是什么?你真的看过firebug中uids变量的值,看到项目是重复的,还是只看到你的日期/名字在页面上翻了一倍?
我怀疑这是因为在显示结果之前没有清除你正在调用.adpend()的DOM元素。
尝试添加到函数的开头:
$('div#holdDates').empty();
以及日期显示循环:
$('ul#'+date).empty();
并且为了更好的衡量,在功能开始时:
$('li.show').unbind('click');