Javascript JSON ajax使用Freebase API不断抛出未定义的内容

Javascript JSON ajax使用Freebase API不断抛出未定义的内容,javascript,jquery,ajax,api,jsonp,Javascript,Jquery,Ajax,Api,Jsonp,我想读Freebase API。我设法做了一部分,但现在我想检索地理位置坐标并创建一张地图,但它似乎不起作用 以下是我的JS代码: $.getJSON("https://www.googleapis.com/freebase/v1/topic/en/paris?filter=/location/location/geolocation&key=AIzaSyAMWOvyMSupZsOHordVo1EawZbSkEySNVA&callback=?", function(dat

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

以下是我的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");
        });
$.getJSON(“https://www.googleapis.com/freebase/v1/topic/en/paris?filter=/location/location/geolocation&key=AIzaSyAMWOvyMSupZsOHordVo1EawZbSkEySNVA&callback=?,函数(数据){
var card=$(“”).attr({“类”:“card”});
var latlon=data.property[“/location/location/geolocation”]。值[0]。text.split(“-”[0]+”,“+data.property[“/location/location/geolocation”]。值[0]。text.split(“-”[1];
var img_url=”http://maps.googleapis.com/maps/api/staticmap?center=“+latlon+”&zoom=14&size=400x300&sensor=false”;
变量imgel=$(“
您可能需要的其他信息:
-请注意,在smartsearch中,我使用$(“#searchinput”).val()而不是paris,但这不会改变任何事情,因为它甚至不适用于paris。
-我认为谷歌地图并不是造成这种情况的原因。
-跨源请求不是问题,因为我设法从网站获取了其他数据
-JSON文件(已删除Jquery解析的回调参数):
-如果需要完整的JS代码,请访问smartsearch.kd.io/JS/script.JS

-如果站点处于脱机状态,这可能是koding限制(站点在退出koding 15分钟后关闭)

您似乎多次执行此类测试:

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) {
这就是你的代码失败的地方。你应该使这个测试更加可靠和稳定,同时删除重复的代码

这里有一个助手函数

函数dataHasProperty(数据,属性){
如果(!data.hasOwnProperty(property))返回false;
如果(!data[property].hasOwnProperty('values')返回false;
返回数据[property].values.length;
}
以下是改进的测试:

if(dataHasProperty(数据,'/people/person/parents')){
if(dataHasProperty(数据,'/people/person/children')){
if(dataHasProperty(数据,'/people/person/sibling_'s')){
if(dataHasProperty(数据,'/location/location/geolocation')){

script.js的第222行出现错误,该行出现了
data.property['/people/person/date\u of_birth'].values[0].text.split(“T”)[0]
。您需要更安全地执行此操作,在每个阶段检查元素是否确实存在。编写一个帮助函数来清理数据。首先让它检查
data.property['/people/person/date\u of u birth']
存在。然后检查
data.property['/people/person/date\u of u birth']。值[0]
存在。然后检查
data.property['/people/person/date\u of u birth']。值[0].text
存在。等等。这需要更多的工作,但会更稳定。但您是对的,是重复测试导致了问题。它不会为我抛出任何错误,但如果我删除if-else条件,我会工作。实际上,它不是if条件(if(data.property[“/location/location/geolocation”].values.length){),如果我把它放在其他检查长度条件的顶部,其他的条件都被破坏了,但是这个条件有效如果你把它放在第222行上面,它就会工作。错误在第222行,执行在那里停止。这就是为什么当你把代码移到更高的位置时它会工作的原因。