我尝试使用外部API检索GeoJSON数据并最终在地图上显示数据。我使用传单库作为地图,我面临的问题是我从这个API获得的数据似乎很好(即如果我从console.log获取数据然后直接在" L.geoJson(输入什么)"它有效)但出于某种原因,如果我尝试使用它的对象,它就无法工作。
modal_update.hide()
由于数据看起来不错(我在http://geojsonlint.com/上进行了测试),不太确定导致问题的是什么。
感谢您的帮助, 于连
答案 0 :(得分:1)
您收到的数据类型是一个字符串。 L.GeoJSON
需要一个GeoJSON对象。您可以使用JSON.parse
方法将字符串转换为对象:
JSON.parse()方法将字符串解析为JSON。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
L.geoJson(JSON.parse(this.response)).addTo(map);
接下来,您需要知道XMLhttpRequest是异步的。请参阅:Easy to understand definition of "asynchronous event"?简而言之,在调用L.GeoJSON
时,oReq.send
可能还没有准备就绪。这就是eventlistener的用武之地。当reqListener
完成接收时,它会调用oReq.send
方法。您需要在L.GeoJSON
方法中创建reqListener
图层,如下所示:
function reqListener () {
L.geoJson(JSON.parse(this.response)).addTo(map);
}