Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从ajax请求替换或管理json数据_Javascript_Jquery_Json - Fatal编程技术网

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

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);

我有一个页面,它发出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('<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中,因为我正试图摆脱之前的“列表”