0

我想阅读 Freebase API http://smartsearch.kd.io。我设法做了一个部分,但现在我想检索地理位置坐标并创建一张地图,但它似乎不起作用。

这是我的 JS 代码:

    $.getJSON("https://www.googleapis.com/freebase/v1/topic/en/paris?filter=/location/location/geolocation&key=AIzaSyAMWOvyMSupZsOHordVo1EawZbSkEySNVA&callback=?", function(data) {
                var card = $("<div>").attr({"class":"card"});
                var latlon=data.property["/location/location/geolocation"].values[0].text.split(" - ")[0] +","+data.property["/location/location/geolocation"].values[0].text.split(" - ")[1];
                var img_url="http://maps.googleapis.com/maps/api/staticmap?center="+latlon+"&zoom=14&size=400x300&sensor=false";
                var imgel = $("<img>").attr("src",img_url);
                imgel.appendTo(card);
                card.appendTo("body");
        });

您可能需要的其他信息:
- 请注意,在 smartsearch 中,我使用的是 $("#searchinput").val() 而不是 paris,但这并没有改变任何东西,因为即使在 paris 上它也不起作用。
- 我认为谷歌地图没有造成这种情况。
- 跨源请求不是问题,因为我设法从网站获取其他数据
- JSON 文件(已删除由 Jquery 解析的回调参数):https ://www.googleapis.com/freebase/v1/topic/en/paris ?filter=/location/location/geolocation&key=AIzaSyAMWOvyMSupZsOHordVo1EawZbSkEySNVA
- 如果您需要完整的 JS 代码,请访问 smartsearch.kd.io/js/script.js
- 如果站点离线,这可能是 koding 限制(站点在 15 分钟后关闭退出科丁)

4

1 回答 1

0

您似乎多次进行这种测试:

if(data.property['/people/person/parents'].values.length) {
if(data.property['/people/person/children'].values.length) {
if(data.property['/people/person/sibling_s'].values.length) {
if(data.property["/location/location/geolocation"].values.length) {

这就是您的代码失败的地方。您应该使这个测试更加可靠和稳定,同时还要删除重复的代码。

这是一个辅助函数

function dataHasProperty(data, property) {
    if (!data.hasOwnProperty(property)) return false;
    if (!data[property].hasOwnProperty('values')) return false;
    return data[property].values.length;
}

这是改进的测试:

if(dataHasProperty(data, '/people/person/parents')) {
if(dataHasProperty(data, '/people/person/children')) {
if(dataHasProperty(data, '/people/person/sibling_s')) {
if(dataHasProperty(data, '/location/location/geolocation')) {
于 2013-07-09T14:50:35.957 回答