在“选择”菜单中解析JSON数据

时间:2014-02-02 17:38:03

标签: jquery json

我正在尝试通过JSON数据进行简单搜索,并在select jenu中返回对象的“列表”。想法是询问用户邮政编码。用户将输入邮政编码并单击提交按钮。这将触发一个函数,用于搜索JSON数据中搜索用户在搜索字段中输入的邮政编码。当找到匹配的邮政编码时,邮政编码和相应的JSON数据将作为对象返回,以便稍后在应用程序中使用。感谢您的帮助,以下代码正在运行:

工作示例: http://jsfiddle.net/KmYJw/17/

<div>
<input name="name" value="" type="text" />
<input value="search in json" type="submit" />
</div>
<a href="#">get location</a>


$(function() {
var city;
var json = {
"people": {
    "zipcode": [{
        "code": "12345",
        "city": "Chicago",
        "name": "Paul"},
    {
        "code": "12345",
        "city": "New York",
        "name": "Mary"}]
}
};

$("input[type='submit']").click(function() {
    var searchName = $("input[name='code']").val();

    $.each(json.people.zipcode, function(i, v) {
        if (v.code == searchName) {
            city = v.city;
            return;
        }
    });
    return;
});

$('a').click(function(){
    alert(city);

});

});

这是我的问题。如您所见,我有两个相同的邮政编码,上面的功能只返回一个警告框中的一个城市。

我需要在选择菜单中显示所有相关城市(还有更多将使用相同的邮政编码添加)。这样,当找到相同邮政编码的更多城市时,用户可以轻松选择从中获取数据所需的城市。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

而不是:

if (v.code == searchName) {
            city = v.city;
            return;
        }

DO 顶级声明:

var cities = [];

点击事件

if (v.code == searchName) {
            cities.push(v.city);

        }

$('a').click(function(){
    alert(cities.join(''));

});
你去的地方: 填充元素的代码: http://jsfiddle.net/vGSXD/

var cities = ["M1", "M2", "M3"],
    citiesNode = document.getElementById('cities'),
    option = '';

for (var i = 0, l = cities.length; i < l ; i+=1)
{
    option = document.createElement('OPTION');
    option.text = cities[i];
    citiesNode.appendChild(option);
}

答案 1 :(得分:0)

我不确定你是否理解你想要实现的目标,但看起来你唯一需要的就是将zipcode / cities关系管理成一个数组,而不是在第一次发现时破坏搜索。

$("input[type='submit']").click(function() {
    var searchName = $("input[name='code']").val();
var zipNCities=new Array();

    $.each(json.people.zipcode, function(i, v) {
        if (v.code == searchName) {
           //use zipcode in the array for future search by city, where you will have  
           //multiple zipcodes
            zipNCities.push({zipcode: v.code, city: v.city});
        }
    });
    return;
});

$('a').click(function(){
   //display cities from the array here.

});