2

我正在尝试使用http://www.livestream.com/userguide/?title=Mobile_API#Requesting_a_mobile_stream上的 livestream 非常有用的移动 api来发出 xml 请求。我感兴趣的是 isLive 响应值。我正在尝试使用这样的ajax请求

$.ajax({
   type: "GET",
   url: "http://xproshowcasex.channel-api.livestream-api.com/2.0/getstream",
   datatype: "xml",
   success: function(xml){
   //this is where I need help.  This is what I would like to happen
   if (isLive == true) {
   //perform action
   }

   else {
   //perform other action
   }

我正在使用http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/上的插件来进行跨域 xml 请求。谁能告诉我这是否是实现这一目标的最有效方法?我无法让它工作。当我运行console.log(xml)(这可能不对)时,JS控制台显示objectObject,我认为这意味着我需要解析数据?如果有人能花时间解释这一点,我会很高兴的。非常感谢。

4

1 回答 1

2

您很接近,您链接到的帖子基本上描述了使用通过YQL的跨域请求进行页面抓取(您可以查看源代码以查看到底发生了什么)。您可以通过使用 jQuery 的常规 JSONP 请求删除插件并完成相同的操作:

function getCrossDomainJson(url, callback) {
    $.ajax({
        url: "http://query.yahooapis.com/v1/public/yql?callback=?",
        data: {
            q: 'select * from xml where url="' + url + '"',
            format: "json"
        },
        dataType: "jsonp",
        success: callback
    });
}

基本上这个函数的作用是调用 Yahoo 的查询 api 并运行查询。当响应返回时,返回的脚本调用 jQuery 提供的回调函数(这就是 JSONP 成为可能的原因)。

您正在使用的查询(在q参数中指定)是针对 XML 提要的,因此您需要使用它select * from xml来检索数据。然后,您可以告诉 Yahoo 以 JSON 格式为您提供结果(我建议使用它而不是 XML;XML 是命名空间的)。

现在,当您调用此函数时:

getCrossDomainJson("http://xproshowcasex.channel-api.livestream-api.com/2.0/getstream", function(data) {
    // data is in JSON format:
    // make sure you can access the isLive property
    if (data && data.query && data.query.results && data.query.results.channel) {
        alert(data.query.results.channel.isLive);
    }
});

回调函数接收通过 YQL 检索到的 JSON 数据并找到isLive属性。

示例:http: //jsfiddle.net/andrewwhitaker/YAGvd/

于 2011-08-11T05:03:45.760 回答