Javascript 在jquery中循环JSON数组
我有一个外部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
{
"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()
请参见第一篇文章的修改