Javascript 使用jQuery解析跨域xml时出现的问题
我在这里找到了一个用于检索跨域xml文件的解决方案,但是我无法解析返回的数据。我还需要为此设置一个超时函数,以保持刷新-这是价格/发票数据Javascript 使用jQuery解析跨域xml时出现的问题,javascript,jquery,xml,crossdomain.xml,Javascript,Jquery,Xml,Crossdomain.xml,我在这里找到了一个用于检索跨域xml文件的解决方案,但是我无法解析返回的数据。我还需要为此设置一个超时函数,以保持刷新-这是价格/发票数据 //the remote xml site = 'http://ec2-54-201-216-39.us-west-2.compute.amazonaws.com/testb/WebService.asmx/GetTickerFromBtcE'; var yql = 'http://query.yahooapis.com/v1/public/yql?q='
//the remote xml
site = 'http://ec2-54-201-216-39.us-west-2.compute.amazonaws.com/testb/WebService.asmx/GetTickerFromBtcE';
var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + site + '"') + '&format=xml&callback=?';
$.getJSON(yql, function (data) {
var xml = $.parseXML(data.results[0]),
xmlDoc = $.parseXML( xml ),
$xml = $( xmlDoc ),
$price = $xml.find( "Currency Value");
$( "#data" ).append( $price.text() );
console.log(xml);
});
简单的
它以字符串形式出现在控制台的#document下,我不知道这是否正确。这似乎是一个问题,因为标签名中有空格,例如“BuyPrice Value”
我在这里读到了其他几个问题,不幸的是,我不认为后端开发人员会用jsonp交付,这会减轻很多问题。另外,让它每XX分钟刷新一次的最佳方法是什么?非常感谢您的建议。首先,您必须处理这样一个事实,即您的xml文档中有一个xml文档
var xml = $.parseXML(data.results[0]),
xmlDoc = $.parseXML( $(xml).find("string").text() ),
然后,您需要获取Currency节点的Value属性
$xml = $( xmlDoc ),
$price = $xml.find("Currency");
$( "#data" ).append( $price.attr("Value") );
最终结果:
var xml = $.parseXML(data.results[0]),
xmlDoc = $.parseXML( $(xml).find("string").text() ),
$xml = $( xmlDoc ),
$price = $xml.find("Currency");
$( "#data" ).append( $price.attr("Value") );
两种刷新方式:
site = 'http://ec2-54-201-216-39.us-west-2.compute.amazonaws.com/testb/WebService.asmx/GetTickerFromBtcE';
var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + site + '"') + '&format=xml&callback=?';
setInterval(function(){
$.getJSON(yql, function (data) {
var xml = $.parseXML(data.results[0]),
xmlDoc = $.parseXML($(xml).find("string").text()),
$xml = $(xmlDoc),
$price = $xml.find("Currency");
$("#data").append($price.attr("Value"));
});
},30*1000);
或者,首选方法:
site = 'http://ec2-54-201-216-39.us-west-2.compute.amazonaws.com/testb/WebService.asmx/GetTickerFromBtcE';
var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + site + '"') + '&format=xml&callback=?';
function getNewData() {
$.getJSON(yql, function (data) {
var xml = $.parseXML(data.results[0]),
xmlDoc = $.parseXML($(xml).find("string").text()),
$xml = $(xmlDoc),
$price = $xml.find("Currency");
$("#data").append($price.attr("Value"));
setTimeout(getNewData,30*1000);
});
}
getNewData();
您的xml包含xml,因此您必须首先解析包装器xml,然后解析其中包含的xml字符串。我以为jQuery的$.parseXML做到了这一点?不,它将只解析外部xml文档,而不是嵌套的xml文档。(不太清楚为什么服务会为xml文档返回xml文档包装器。)我认为这并不理想,但这是我必须处理的。我会向提供服务的开发者提出建议,这对我来说和平常一样奇怪,真是太棒了。谢谢你,伙计。你能把这一切都封装在一个函数中并调用setTimeout来刷新它吗?是的,只是不要让超时太短。我不会少于30秒当我像这样在setTimeout中包装它时,它会延迟初始加载并且不会刷新。。。有什么意见吗?setTimeout(函数(){$(“.priceData”).append($price.attr(“Value”);},15000);您需要重新发送整个ajax请求。问题中的所有代码都必须在setTimeout(当然减去包含url的静态变量)之内。噢,我在最后两个示例中使用了您的非工作代码,而不是我的代码。怎么会这样