1

好的,这是我的问题。我正在这个名为 10winstreak 的小站点上工作,我正在尝试使用 javascript 检测流是否处于实时状态,因为我们运行该站点的服务器无法处理使用 PHP 处理的每个请求。检测流是否实时的基础是您转到他们的 XML 文件并在他们的一个标签中(如果它是实时的)它会说一些类似于真实的内容,并且通常他们网站上的 XML 文件将是空的如果特定流未直播。例如,如果您有一个用于游戏点的 twitch.tv 流,您可以访问http://api.justin.tv/api/stream/list.xml?channel=gamespot,如果里面有东西,那么它就是直播的,如果没有,那就是不是。

所以基本上我的代码如下所示:

    function check (URL, term){
    $.get(URL , function(data){
        console.log(data);
        //data is whatever the server returns from the request, do whatever is needed with it to show who is live.

        var number = data.search(term);
        if (number > -1)            
        {
            document.write("Live");
        }

        else 
        {   
            document.write("Offline");
        }
    });
    }

URL 是传入的 url,term 是要在 xml 文件中搜索的术语(通常是“true”或“True”)。但在发生任何事情之前,我最终得到“XMLHttpRequest 无法加载http://api.own3d.tv/liveCheck.php?live_id=6815 。Access -Control-Allow-Origin 不允许来源(我的服务器的 URL)。”

我已经在整个网络上进行了调查,但似乎找不到任何可以使用的东西。有很多理论的东西,但没有足够的实际代码,我不明白理论的东西能够开始输入代码。从我所见,您有两种方法可以使用,使用 JSONP 或在服务器的某处添加一行以允许跨域访问。我既不完全理解也不知道如何或做什么。有人向我展示需要做些什么来摆脱这个错误会很有帮助。当然,如果您可以向像我这样的非编码人员解释它会更棒,但就我目前而言,只要代码适用于我所关心的一切,它也可能是魔法哈哈。

4

4 回答 4

1

你可以解决它:)

看看xReader

<script src="http://kincrew.github.com/xReader/xReader.full.js"></script> 
<script type="text/javascript"> 
xReader("http://api.own3d.tv/liveCheck.php?live_id=6815", function(data) { 
    alert(data.content); 
})
</script>

我认为您需要 cacheburst 选项。但是你可以被禁止使用 YQL。

于 2012-11-14T21:48:07.510 回答
0

我认为这是因为路径不是相对的。您可能从不同的域/子域调用它。您可以潜在地允许其他来源访问,这可能会打开安全漏洞,或者您可以在本地创建代理。

在 PHP 中创建代理很容易:http ://blog.proxybonanza.com/programming/php-curl-with-proxy/ 现在,不要将您的请求直接发送到该 URL,而是将请求从 jQuery 发送到您自己的本地 url 和让它在服务器端访问它。

另一种选择是使用 YQL:http ://www.parrisstudios.com/?p=333 (我不久前写过一篇关于此的文章)...这样您就可以将响应转换为 JSON,这可以是跨域访问(与 javascript 一样)。

您可以要求使用 JSONP 服务器和 JSON 格式返回所有 API 响应。

于 2012-11-07T00:36:59.437 回答
0

简短的回答:除非 10winstreak 提供 JSONP 服务,否则您必须在服务器端执行操作。

稍微长一点的答案:

出于安全原因,浏览器不允许您从 www.example.com 向 www.example2.com(或除 www.example.com 之外的任何其他域)发出 AJAX 请求。除了使用 JSONP 之外,您对此无能为力(只有在远程 Web 服务提供它的情况下,您才能这样做)。

因此,您最终需要做的是询问您的服务器“嘿,另一台服务器上有什么?” 并且(因为它不限制浏览器的方式)它可以从其他服务器获取 XML。有多种方法可以做到这一点,无论是使用代码还是 Apache 配置;不确定什么适合您,但希望您现在了解一般原则。

PS 看到这个问题:为跨域 XHR 丢弃 cookie 不会更简单吗?如果你很好奇为什么浏览器会这样做。

* 编辑 *

我刚刚查看了 JustinTV 的网站,看来他们已经有一个 PHP 库供您使用: https ://github.com/jtvapi/jtv_php_api

这很可能是您最好的选择(如果您想继续使用 PHP;如果没有,他们有其他语言的库:http ://www.justin.tv/p/api )。

于 2012-11-07T00:34:26.293 回答
0

您将无法通过客户端 javascript 执行此操作,除非他们启用了某种方式来检索他们的跨域数据(CORSJSONP 、一些从crossdomain.xml文件获得读取权限的闪存小部件)位于他们的服务器上...)

于 2012-11-07T00:39:22.087 回答