1

JQuery を使用して、ジオネームから都市データを取得しています。私の問題は、JQuery マップ関数を使用するときにサブ配列項目の値を抽出したい場合です。

この例で、ウィキペディアのリンクを取得したい場合、どうすればよいでしょうか?

私は試しました: ウィキペディア: 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",

JQuery:

$("#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

同じ事故で、次の解決策を見つけました:

サブ要素のlangundoを呼び出す代わりに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 に答える
0

あなたalternateNamesはオブジェクトの配列なので、インデックスを使用して配列からオブジェクトを取得する必要があります。オブジェクトを取得したら、「lang」フィールドを取得できます。

item.alternateNames[2].lang

それはあなたに「リンク」を返すはずです。itemこれは、が の適切な親オブジェクトであると想定していますalternateNames

于 2010-09-16T19:30:33.253 に答える