Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery解析跨域xml时出现的问题_Javascript_Jquery_Xml_Crossdomain.xml - Fatal编程技术网

Javascript 使用jQuery解析跨域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='

我在这里找到了一个用于检索跨域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=' + 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的静态变量)之内。噢,我在最后两个示例中使用了您的非工作代码,而不是我的代码。怎么会这样