JSON ajax使用Freebase API继续抛出undefined

时间:2013-07-09 13:22:20

标签: javascript jquery ajax api jsonp

我想阅读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,但这并没有改变任何东西,因为它甚至不能用于巴黎。
- 我认为谷歌地图不会造成这种情况 - 交叉原始请求不是问题,因为我设法从网站上获取其他数据
- 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限制(网站在退出koding后15分钟关闭)

1 个答案:

答案 0 :(得分: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')) {