[英]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
,如果responseData
为null
显然您将无法访问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.