繁体   English   中英

无法使用Ajax从xml文件获取数据对象

[英]Unable to obtain data object from xml file with ajax

我无法弄清楚我在做什么错。 它在另一页上对我有用,但在此页面上不起作用(capitalbikeshare)。 “数据”变量确实包含一个对象,但是当我尝试打印长度或特定项目时,它给了我一个错误消息,提示它无法读取空“提要”的属性。 我究竟做错了什么?

$.ajax({ 
    url:'http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent('https://www.capitalbikeshare.com/data/stations/bikeStations.xml'),
    dataType : 'jsonp',
    success: function (data) {
        var entry = data.responseData.feed.entries;
        var entry_length = entry.length;
        alert("success"+entry_length);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        alert("fail");
    }
});

这是XML文件的一个小样本。

 <stations lastUpdate="1447107709602" version="2.0">
 <script id="tinyhippos-injected"/>
 <station>
 <id>1</id>
 <name>20th & Bell St</name>
 <terminalName>31000</terminalName>
 <lastCommWithServer>1447107692939</lastCommWithServer>
 <lat>38.8561</lat>
 <long>-77.0512</long>
 <installed>true</installed>
 <locked>false</locked>
 <installDate>0</installDate>
 <removalDate/>
 <temporary>false</temporary>
 <public>true</public>
 <nbBikes>5</nbBikes>
 <nbEmptyDocks>5</nbEmptyDocks>
 <latestUpdateTime>1447106879008</latestUpdateTime>
 </station>
 </stations>

该Web服务旨在解析rss提要,而不是任意XML。

正确的AJAX通话

$.ajax({ 
    url: 'http://ajax.googleapis.com/ajax/services/feed/load',
    dataType : 'jsonp',
    data: {
        v: "1.0",
        num: 10,
        q: 'https://www.capitalbikeshare.com/data/stations/bikeStations.xml'
    },
    success: function (data) {
        console.log(data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.error(textStatus);
    }
});

回应

{
    "responseData": null,
    "responseDetails": "Feed could not be loaded.",
    "responseStatus": 400
}

通过尝试data.responseData.feed.entries ,如果responseDatanull显然您将无法访问feed

如果使用诸如cors.io之类的其他Web服务,则可以加载xml,然后使用jQuery访问字段,而不是加载JSON。

$.ajax({
    url: 'http://cors.io',
    dataType : 'xml',
    data: {
        u: 'https://www.capitalbikeshare.com/data/stations/bikeStations.xml'
    },
    success: function (data) {
        console.log(data);
        $(data).find(">stations>station>name").each(function(){
            console.log($(this).text());
        });
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.error(textStatus);
    }
});

您可能想使用JSON.stringify()API转储从AJAX提取的数据的内容,以查看该属性是否确实存在。

success: function (data) {
    console.log('Dumping data object -> ' + JSON.stringify(data, null, 4));
}

如果您使用的是chrome,则可以通过“ ctrl + shift + j ”访问控制台输出面板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM