0

OpenLayers.Request.GETJSON形式のURLからデータをロードするために使用しようとしています。

リクエストは次のとおりです (注: URL は正常に機能し、JSON 形式でデータを取得します)。

var request = OpenLayers.Request.GET({
    url: "http://localhost:8080/geoserver/wrspc/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=wrspc:layer1&maxFeatures=60&outputFormat=json",
    callback: handler
});

request.responseTextハンドラーの場合、次のようにjsonファイルに特定のキーを取得して表示しようとしました:

var obj;

function handler(request) {
    obj = request.responseText;
    alert (obj.features[0].indicator);
}

ここに私のJSONがあります:

 {"type":"FeatureCollection","features":[{"type":"Feature","id":"titid","geometry":{"type":"MultiPolygon","coordinates":[[[[3694.7863290442,3749.0463695516],[9328.2052648721,3756.61081112875],[3694.18117371807,3861.9059202327],[9340.68659347435,3834.4171230714],[9334.7863290442,3749.0463695516],[3634.7863290442,3839.0463695516]]]]},"geometry_name":"the_geom","properties":{"name1":"asme","number":9130,"indicator":"20","gid":939}}],"crs":{"type":"EPSG","properties":{"code":"2684"}}}

しかし、私はこのエラーを受け取ります: (TestPrint.html:506 が警告行であることに注意してください)

 Uncaught TypeError: Cannot read property '0' of undefined TestPrint.html:506
 GeoExt.form.FormPanel.listeners.actioncomplete TestPrint.html:506
 h.Event.fire ext-all.js:21
 h.Observable.fireEvent ext-all.js:21
 (anonymous function) ext-all.js:21
  h.Event.fire ext-all.js:21
  h.Observable.fireEvent ext-all.js:21
  Ext.form.BasicForm.Ext.extend.afterAction ext-all.js:21
  GeoExt.form.SearchAction.Ext.extend.handleResponse SearchAction.js:147
  OpenLayers.Protocol.WFS.v1.OpenLayers.Class.handleRead OpenLayers.js:843
  (anonymous function) OpenLayers.js:413
  (anonymous function) OpenLayers.js:62
  OpenLayers.Request.runCallbacks OpenLayers.js:509
  d.onreadystatechange OpenLayers.js:508
  b.dispatchEvent OpenLayers.js:751
  c OpenLayers.js:744
  _object.onreadystatechange OpenLayers.js:748
4

3 に答える 3

0

次の方法で「インジケーター」オブジェクトに到達できます(プロパティ機能の下にネストされています):

obj.features[0].properties['indicator']

そのような場合、json 構造を理解するためにオンライン json パーサーを使用できます。

あなたのjson:

{

    "type":"FeatureCollection",
    "features":[
        {
            "type":"Feature",
            "id":"titid",
            "geometry":{
                "type":"MultiPolygon",
                "coordinates":[
                    []
                ]
            },
            "geometry_name":"the_geom",
            "properties":{
                "name1":"asme",
                "number":9130,
                "indicator":"20",
                "gid":939
            }
        }
    ],
    "crs":{
        "type":"EPSG",
        "properties":{
            "code":"2684"
        }
    }

}
于 2013-05-28T06:47:34.650 に答える
0

私はそれを理解しました、今それはeval関数で動作します、

obj = eval('(' + request.responseText + ')');

alert(obj.features[0].properties['indicator']);

于 2013-05-28T08:37:39.693 に答える