1

我正在使用 JQuery 从地名中获取城市数据。我的问题是当我想在使用 JQuery 映射函数时提取子数组项的值时。

在此示例中,如果我想获取 Wikipedia 链接,我该怎么做?

我试过:维基百科:item.alternateNames.lang['link']

但没想到它真的会起作用。有谁知道我可以提取子数组项吗?

以下是一些代码:

JSON 结果

"geonames": [{
"alternateNames": [
  {
    "name": "Rancho Cucamonga",
    "lang": "en"
  },
  {
    "name": "91739",
    "lang": "post"
  },
  {
    "name": "http://en.wikipedia.org/wiki/Rancho_Cucamonga%2C_California",
    "lang": "link"
  }

],
adminCode2": "071",
"countryName": "United States",
"adminCode1": "CA",
"fclName": "city, village,...",
"elevation": 368,
"score": 0.9999999403953552,
"countryCode": "US",
"lng": -117.5931084,
"adminName2": "San Bernardino County",
"adminName3": "",
"fcodeName": "populated place",

查询:

$("#city").autocomplete({
        source: function(request, response) {
            $.ajax({
                url: "http://ws.geonames.org/searchJSON",
                dataType: "jsonp",
                data: {
                    featureClass: "P",
                    style: "full",
                    maxRows: 12,
                    name_startsWith: request.term
                },
                success: function(data) {

                    response($.map(data.geonames, function(item) {
                        return {
                            label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
                            value: item.name,
                            latitude: item.lat,
                            longitude: item.lng,

                            // problem here: how to get the value for the alternateNames.lang where lang = link
                            wikipedia: item.alternateNames.lang['link']

                        }
                    }))
                }
            })
        },
4

3 回答 3

3

尝试...

wikipedia: item.alternateNames[2].name

但是,如果您想搜索它们...

var name;
$.each( item.alternateNames, function(){
  if ( this.lang == 'link' ) {
    name = this.name;
    return false;
  }
});
于 2010-09-16T19:31:00.273 回答
0

alternateNames是一个对象数组,因此您必须使用索引从数组中检索对象。获得对象后,您可以检索“lang”字段:

item.alternateNames[2].lang

那应该返回您的“链接”。这是假设item是正确的父对象alternateNames

于 2010-09-16T19:30:33.253 回答
0

在同样的事故中,我找到了下一个解决方案:

而不是调用子元素lang撤消map,你可以只分配父元素wikipedia: item.alternateNames。之后,您可以在自动完成的选择事件中访问它们的嵌套元素。

这是我的例子:

$("#Customer_Name ").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: '@Url.Action("LookupCustomers", "Customers")', type: "POST", dataType: "json",
                    data: { searchText: request.term, maxResults: 10 },
                    success: function (data) {

                            response($.map(data, function (item) {

                        //respose($.each(data, function (item

                            return {
                                label: item.Name,
                                value: item.Name,
                                id: item.Id,
                                phone: item.Phone,
                                addressStreet: item.AddressStreet,
                                addressBuilding: item.AddressBuilding,
                                addressHousing: item.AddressHousing,
                                addressFlat: item.AddressFlat,
                                metroStationId: item.MetroStationId,
                                metroStation: item.MetroStation  //trouble was here

                            }
                        }))
                    }
                })
            },
            select: function (event, ui) {
                document.getElementById("Customer_Id").value = ui.item.id;
                document.getElementById("Customer_Name").value = ui.item.value;
                document.getElementById("Customer_Phone").value = ui.item.phone;
                document.getElementById("Customer_AddressStreet").value = ui.item.addressStreet;
                document.getElementById("Customer_AddressBuilding").value = ui.item.addressBuilding;
                document.getElementById("Customer_AddressHousing").value = ui.item.addressHousing;
                document.getElementById("Customer_AddressFlat").value = ui.item.addressFlat;
                document.getElementById("Customer_MetroStationId").value = ui.item.metroStationId;
                document.getElementById("Customer_MetroStation_Name").value = ui.item.metroStation.Name;  //and, trouble was here
            }
        });
于 2012-09-26T04:18:49.963 回答