javascript - jquery fetchJSON 选择正确的对象

标签 javascript jquery ajax json getjson

所以目前我正在尝试创建一个可以在我的整个应用程序中重复使用的点击事件,

导航的基本流程是用户点击一个链接,点击该链接将收到一个 getJSON 请求,JSON 被解析并在子导航中返回,但是我有点不明白的地方是访问 JSON 中的正确对象以循环创建子导航,下面是我的代码。

$(".primary a").on("click", function(e){

    var type = "data."+$(this).data('type');

    if($(".secondary").hasClass("bounceInUp")) {
        $(".secondary").removeClass("bounceInUp").addClass("bounceOutDown");
    }

    $.getJSON("js/data.json", function(data){

        var items = [];

        $.each(data, function(key, val){
            items.push('<li><a href="" data-name="'+ val +'"><img src="img/wood-nav.jpg" /></a></li>');
        });

        console.log(items);
        $(".secondary ul").empty();
        $(".secondary ul").html(items);
        $(".secondary").removeClass("bounceOutDown").addClass("animated bounceInUp");

    });
    e.preventDefault();

});

我的 JSON 如下所示,

{
    "doors" : {
        "1" : "door 1",
        "2" : "door 2",
        "3" : "door 3",
        "4" : "door 4",
        "5" : "door 5",
        "6" : "door 6",
        "7" : "door 7",
        "8" : "door 8",
        "9" : "door 9",
        "10": "door 10"
    },

    "handles" : {
        "1" : "handle 1",
        "2" : "handle 2",
        "3" : "handle 3",
        "4" : "handle 4",
        "5" : "handle 5",
        "6" : "handle 6",
        "7" : "handle 7",
        "8" : "handle 8",
        "9" : "handle 9",
        "10": "handle 10"
    },

    "worktops" : {
        "1" : "worktop 1",
        "2" : "worktop 2",
        "3" : "worktop 3",
        "4" : "worktop 4",
        "5" : "worktop 5",
        "6" : "worktop 6",
        "7" : "worktop 7",
        "8" : "worktop 8",
        "9" : "worktop 9",
        "10": "worktop 10" 
    },

    "floors" : {
        "1" : "floor 1",
        "2" : "floor 2",
        "3" : "floor 3",
        "4" : "floor 4",
        "5" : "floor 5",
        "6" : "floor 6",
        "7" : "floor 7",
        "8" : "floor 8",
        "9" : "floor 9",
        "10": "floor 10" 
    },

    "walls" : {
        "1" : "wall 1",
        "2" : "wall 2",
        "3" : "wall 3",
        "4" : "wall 4",
        "5" : "wall 5",
        "6" : "wall 6",
        "7" : "wall 7",
        "8" : "wall 8",
        "9" : "wall 9",
        "10": "wall 10" 
    }

}

我已经尝试过什么?我已经尝试在循环外构建数据对象名称,然后将其传入,因此如果我单击门,例如 var type 将 = 到“doors”,然后我将其连接到到 data. 但是当遍历它时我得到了他的错误,

Uncaught TypeError: Cannot use 'in' operator to search for '9' in data.doors

似乎我无法通过点击进入我需要的对象,但一定有办法吗?

最佳答案

如果我没理解错的话,您正在尝试遍历 type 变量,它是一个 string

var type = "data."+$(this).data('type');

试试这个:

var type = $(this).data('type');

$.getJSON("js/data.json", function(data){

        var items = [],
            data = data[type];

        $.each(data, function(key, val){
            items.push('<li><a href="" data-name="'+ val +'"><img src="img/wood-nav.jpg" /></a></li>');
        });
        //...

关于javascript - jquery fetchJSON 选择正确的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16438020/

相关文章:

javascript - 无法连接到 CloudFoundry 上的 TCP 服务器(localhost node.js 工作正常)

javascript - 从 facebook 获取用户电子邮件与 v2.8 中的 SDK java 脚本连接

jquery - 开始上传所有jquery文件上传blueimp

javascript - JS 显示 HTML 标签

php - 设置 PHPSESSID Cookie、CORS

Javascript 文件编辑停止与 Eclipse 2020-06 一起使用

javascript - 深度克隆类实例 JavaScript

javascript - 具有不同高度和宽度的响应式图像网格

javascript - jQuery Mobile,选择在单击之前不显示选定的选项

jquery - Rails 中的 Ajax 调用重复