2013-11-25 120 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無法選擇它的原因仍然未知。 –

相關問題