【发布时间】:2014-07-08 12:34:37
【问题描述】:
Original Fiddle 使用第一个 JSON 文件
Failed Fiddle 使用第二个 JSON 文件。
我无法使用 split 和 $.each 函数从数组中返回每个小选项。
我正在使用来自 this site 的 AJAX 链接选择框。它需要这样的标记来构建链式选择框:
<select>
<option value="mustang2000">Ford » Mustang » 2000</option>
<option value="mustang2005">Ford » Mustang » 2005</option>
<option value="focus">Ford » Focus » 2010</option>
<option value="alero">Oldsmobile » Alero » 1993</option>
</select>
通常,选项的 JSON 文件如下所示:
第一个 JSON 文件
[
{
"bigcat": "Sport",
"cat": "mainstream",
"choice": "football"
},
{
"bigcat": "Sport",
"cat": "mainstream",
"choice": "basketball"
},
{
"bigcat": "Sport",
"cat": "niche",
"choice": "MMA"
},
{
"bigcat": "Sport",
"cat": "niche",
"choice": "wrestling"
}
]
我想使用“|”将同一类别的所有选项塞入一个大选项中作为分隔符,像这样:
第二个 JSON 文件
[
{
"bigcat": "Sport",
"cat": "mainstream",
"choice": "football|basketball"
},
{
"bigcat": "Sport",
"cat": "niche",
"choice": "wrestling|racing"
}
]
并在脚本中使用split 和$.each 函数返回每个小选项
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%20%3D%22http%3A%2F%2Fgoo.gl%2FqMlPxn%22&format=json&diagnostics=true&callback=",
success: function(data){
var $select = $('select');var $option="";
$.each(data.query.results.json.json, function (index, i) {
smallchoice = i.choice.split(',');
$.each(smallchoice,function(i,smallchoice){
$option = $("<option/>").attr("value", smallchoice).text(i.bigcat + "@" +( i.cat || "") +"@" + smallchoice);
});
$select.append($option);
});
$select.dynamicDropdown({"delimiter":"@"});
}
});
但我不知道如何将bigcat 和cat 分配给每个小选项。谁能给我建议?
【问题讨论】:
-
事实上,如果你只是指定
dataType是json它会为你解析它,所以你的data是一个对象。 -
另外,我注意到的一件事是你需要小心你的变量和闭包的名称......尤其是
function(i,smallchoice)当你已经在上面几行声明了相同的变量时。将其更改为其他内容,例如function(j, choice),我已经看到了一些不是“未定义”的内容
标签: javascript jquery json split