Javascript 在jquery中循环JSON数组

Javascript 在jquery中循环JSON数组,javascript,jquery,html,json,Javascript,Jquery,Html,Json,我有一个外部JSON文件,其中包含以下内容: { "Home": [ { "link":"index.php" , "text":"Home" }, { "link":"index.php?page=aboutus" , "text":"About Us" } ] "Games": [ { "link":"games.php" , "text":"All Games" }, { "link":"games.php?name=game" , "text":"Ga

我有一个外部JSON文件,其中包含以下内容:

{
"Home": [
    { "link":"index.php" , "text":"Home" }, 
    { "link":"index.php?page=aboutus" , "text":"About Us" }
]
"Games": [
    { "link":"games.php" , "text":"All Games" }, 
    { "link":"games.php?name=game" , "text":"Game" }
]
}
这是我的JSON文件的基本设置。我计划在我的网站扩展时添加更多内容。我使用它作为菜单栏设置的一部分。它有3个按钮:主页、游戏和论坛。当你把鼠标移到主页按钮上时,我想把“主页”中的内容变成链接并显示在我的网站上,和游戏按钮一样,当你把鼠标移到论坛按钮上时,什么也不会显示。我试过这个:

编辑:再次略微更改了该函数,试图避免每次鼠标悬停时调用服务器,并循环遍历所有这些函数,并在.navDD div标记中显示它们

$(document).ready(function(){
    var menu
    $.getJSON('menu.json', function(data) {
        menu = data;
    });
    $(".navlink").mouseenter(function(){
        var find=$(this).text();
        $.each(data,function(index){
            $(".navDD").html(menu[find][index]['text']);
        });
    });
});
我肯定我还是把事情搞砸了。现在我GetUncaughtTypeError:无法读取未定义的属性'length'。我根本不知道我做错了什么。尽管在此之前我从未使用过JSON

谁能帮帮我吗

谢谢,
Legobear154

对象中没有
find
属性,因此您可以使用
未定义的
。然后,您尝试读取此未定义属性的第0个索引,这将导致错误


如果要访问home对象中第0个元素的文本属性,可以说
data.home[0]。text

您可以这样做:

$(".navlink").mouseenter(function(){
    var find=$(this).text;
    $.getJSON('menu.json', function(data) {
        $(".navDD").html(data[find][0].text);
    });
});
通过属性的名称访问属性。这是假设您使用的文本值与对象的JSON属性匹配

我还建议不要在每次鼠标输入时都执行
$.getJSON()
。这是大量的服务器流量。用户可以“鼠标进入”数百次

for (var key in data) {
    if (key == 'Home'){
        $(".navDD").html(data[key]['text']);
    }
}
使用for循环时,还应确保正在使用对象。这可能就是您的“未定义”错误的来源

if (typeof data === 'object'){
    for (var key in data) {
        if (key == 'Home'){
            $(".navDD").html(data[key]['text']);
        }
    }
}

你确定这是正确的吗

 var find=$(this).text;
我会:

 var find=$(this).text();
然后

   $.getJSON('menu.json', function(data) {
        $(".navDD").html(data.[find][0].text);
    });

您正在使用
var find=$(this).text
来获取元素的内容,您需要使用
var find=$(this).text()
来调用
text
方法

您正在使用
data.find[0]。text
若要从对象中获取值,需要使用
menuData[find][0]。text

您不应该在每次发生
mouseenter
事件时都请求JSON文件,您应该只在第一次请求它,然后再保留它

$(document).ready(function(){
  var menuData = null;

  $(".navlink").mouseenter(function(){
    var find = $(this).text();
    if (menuData != null) {
      $(".navDD").text(menuData[find][0].text);
    } else {
      $.getJSON('menu.json', function(data) {
        menuData = data;
        $(".navDD").text(menuData[find][0].text);
      });
    }
  });

});

您是否正在使用
$.getJSON()
的回调函数?是否有
http://example.com/menu.json
或您的Web服务器上的任何内容?@MarcB-如果他得到了他描述的错误,他必须这样做如果您确信主页按钮的
文本
home
精确拼写,那么
$(.navDD”).html(data[find][0][text'];
会起作用。如果您仍然无法获取它,请将其记录到控制台。在chrome中,
console.log(data[find][0][text']);
我用新代码编辑了主要帖子。但如上所述,仍然会出现错误。或者更明显的是,
data[“home”][0][text]
@Andrew那也行-我更喜欢用“点”导航,但这正是我的偏好。我认为你是对的,但他在那之前犯了一个错误
$(这个)。text
应该是
$(这个)。text()
请参见第一篇文章的修改