在javascript中检索多维json数组

时间:2013-09-14 00:30:47

标签: javascript json

我知道这个主题有很多问题和答案,但没有回答我的具体问题 - 我一直在搜索并绕圈子走了一个月!

我使用php从may数据库获取值并通过json返回:

    $staff_list = array(
          "name" => $staff_names,
          "id" => $staff_ids,
          "img" => $staff_imgs,
          "typeID" => $staff_types,
    );

    print(json_encode($staff_list));

我正在使用javascript:

$.getJSON(requestURL, function(data) {
    if( data.errorResponse ) {
            element.html("<p>(" + data.errorResponse.message + ")</p>");
    } else {
        $('#designeesloading').remove();

        $.each(data, function(i, field){
            $.each(field, function(x, value){
                haystack.push({
                  i:value //this should put into 4 arrays as per above shouldn't it?
                });
            });
        });


    } //errorResponse else

  }); //getJSON

但是现在不是干草堆25个元素(因为有25个名字,图像等),当我去这里提取时,它经历了100次(我想象的是4次×25):

(每次有人在搜索框中输入时都会触发):

    $.each(haystack, function(i,v) { //this goes through 100 times instead of 25
    if ((v['name'].toLowerCase().indexOf(needle) >= 0)) {
      choices.push({ //only want to add to choices if what they are searching for is found
        "id":v['id'],
        "name":v['name'],
        "typeID":v['typeID'],
        "img":v['img']
      });
      resultflag++;
    }
    });

如果有人想看一眼就在这里。令人沮丧的是,我已经用PHP在5分钟内完成了这项工作。

http://cybril.com/donation/donate.php

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的代码存在两个问题。首先,您只需将所有内容推送到haystack,您就不会创建嵌套对象来保存每个工作人员。其次,在像{ key: val }这样的对象文字中,i未被评估,它被视为文字名称;仅评估val。如果要使用计算键,则必须使用方括号表示法。

    $.each(data, function(i, field){
        $.each(field, function(x, value){
            if (!haystack[x]) {
                haystack[x] = {};
            }
            haystack[x][i] = value;
        });
    });