2013-11-25 49 views
1

我使用YQL使用JSONP获取数据,并返回一个XML字符串。我使用$.parseXML解析它,并将其放入jQuery选择器中,并尝试选择一个节点。但是,它包含一个名称空间(例如,yweather:),并且jQuery似乎无法正常工作。在jQuery中选择一个具有名称空间的节点

other SO answers他们建议做\\:会解决它。确实如此,但只有当我接收到的数据是XML(我是JSONP。)

$.ajax({ 
    url: "http://query.yahooapis.com/v1/public/yql", 
    data: { 
     q: "select item from weather.forecast where location=48907", 
     format: "jsonp" 
    }, 
    dataType: "jsonp" 
}).success(function(data){ 
    var xml = $.parseXML(data.results[0]); 
    console.log($("yweather\\:condition", xml)); 
}); 

它没有匹配。

+0

可以从YQL中的同一张表中获取数据,而不是xml结果,而不是xml ...亲自可以更容易地使用IMO。转到[YQL控制台](http://developer.yahoo.com/yql/console/#h=select+*+from+weather.forecast+where+location%3D48907)并选择'json'格式并记下json格式添加到控制台 – charlietfl

+0

演示中生成的URL在密歇根州相同的位置,数据全部在json http://jsfiddle.net/faNaM/ – charlietfl

+0

@charlietfl - 我只注意到YQL允许跨源请求,谢谢。 –

回答

1

想不通它为什么不起作用,还有其他答案建议转义:\\。但它不起作用。所以我尝试过这种方式,它正在工作。这也等于jQuery的find方法,它是工作demo

代码是

var xml = $.parseXML(data.results[0]); 
    xml = $(xml).find('channel item'); 
    var weatherList = xml.find('*').filter(function(){ 
    return this.tagName === "yweather:condition"; 
    }); 
    console.log(weatherList); 

希望这有助于。

+0

我相信如果没有任何工作,这将是唯一的解决方案。 –

+0

@Derek朕会功夫代码中的$('yweather:condition',xml)'和$(xml).find('*')。filter(function(){..})没有区别'。两者都进行相同数量的迭代。我认为这符合你的标准。 – redV

+0

公平地说,它确实解决了这个问题。谢谢!但是,jQuery无法选择它的原因仍然未知。 –

相关问题