Javascript 从ajax请求替换或管理json数据
我有一个页面,它发出ajax请求并以json格式返回数据 在将这些数据添加到DOM之前,我需要对其进行排序,因此使用以下代码将其放入一个对象中Javascript 从ajax请求替换或管理json数据,javascript,jquery,json,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);
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('<ul class="dayList" id="' + date + '"><li class="date" >' + date + '</li></ul>');
$.each(birthDates[date], function() {
$('ul#' + date).append('<li class="show" id="' + this.uid + '">' + 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
功能(数据){
var生日={};
变量uids={};
$.each(data.users,function(){
如果(!uids[this.uid]){
uids[this.uid]=[];
uids[this.uid].push(this);
}
如果(!birthDate[此.birthDate])
生日[这个.生日]=[];
生日[this.birthDate]。推送(this);
});
for(出生日期中的变量d){
var日期=d;
$('div#holdDates')。追加('ul class=“dayList”id=“”+date+”>'+date+” /ul>);
$.each(生日[日期],函数(){
$('ul#'+date).append('“+this.name+” );
});
}
$('li.show')。单击(函数(){
var getuid=$(this.attr('id');
$showArr=uids[getuid];
//现在我可以得到关于用户的扩展数据
当第一次加载页面时,这一切都非常有效,但是我遇到了两个问题,这两个问题都是由于发出了第二个ajax请求
1) 如果我发出相同的ajax请求(提供相同的变量,因此相同的数据会再次返回),那么数据会被添加到新创建的对象(uid和birthdate)中两次,而我不知道如何保持其唯一性
2) 有时(我无法调试以找出原因),我无法从uids对象获取任何扩展用户数据
有什么想法吗?我这样做有效吗?
我觉得奇怪的是,你不能清空你创建的对象,但很明显,我读到的所有东西都说你不能
附加
好的,在发布这篇文章之后,我接下来要做的就是构建一个动态标记云,它依赖于返回的json。
所以,现在我又遇到了同样的问题。我需要在每次请求后将云标记为新的。我真的希望有一种方法可以去除javascript中的“遗留”数据
谢谢,
Pete每次调用函数时,都会重新创建函数(数据)中使用var关键字声明的所有内容 您的问题的症状是什么?您是否确实查看了firebug中uids变量的值并看到项目被复制,或者您只是看到页面上的日期/名称被翻倍了 我怀疑这是因为在显示结果之前没有清除正在调用的DOM元素。append() 尝试将以下内容添加到函数的开头:
$('div#holdDates').empty();
$('li.show').unbind('click');
以及您的日期显示循环:
$('ul#'+date).empty();
为了更好地衡量,在功能开始时:
$('div#holdDates').empty();
$('li.show').unbind('click');
每次调用函数时,都会重新创建函数(数据)中使用var关键字声明的所有内容 您的问题的症状是什么?您是否确实查看了firebug中uids变量的值并看到项目被复制,或者您只是看到页面上的日期/名称被翻倍了 我怀疑这是因为在显示结果之前没有清除正在调用的DOM元素。append() 尝试将以下内容添加到函数的开头:
$('div#holdDates').empty();
$('li.show').unbind('click');
以及您的日期显示循环:
$('ul#'+date).empty();
为了更好地衡量,在功能开始时:
$('div#holdDates').empty();
$('li.show').unbind('click');
您在哪里设置li.show的id?您的用户数据在数组中是否有两次,或者整个新列表是否在末尾添加到$('div#holdDates')中?抱歉,我之前没有看到这些注释。1-show的li是在$('ul#'+date)中设置的。追加(里面有很多东西,但我不想把问题弄得一团糟。2)不应该将列表“添加”到holdDates,因为我正在尝试删除以前的“列表”,您在哪里设置li.show的id?您的用户数据在数组中是否有两次,或者整个新列表是否被添加到$('div#holdDates'))最后?对不起,我没有看到Bendwey之前的评论。1-节目的li设置为$('ul#'+日期)。append(里面有很多东西,但我不想把问题弄得一团糟。2)列表不应该“添加”到holdDates中,因为我正试图摆脱之前的“列表”