1

これが私の問題です。私は10winstreakと呼ばれるこの小さなサイトで作業しており、ストリームがライブであるかどうかをjavascriptで検出しようとしています。これは、サイトを実行しているサーバーがPHPですべてのリクエストを処理できないためです。ストリームがライブであるかどうかを検出するための基本は、XMLファイルに移動し、タグの1つ(ライブの場合)でtrueの線に沿って何かを言い、多くの場合、サイトのXMLファイルが空になることです。特定のストリームがライブでない場合。たとえば、gamespotの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をロードできません。Origin (サーバーのURL)はAccess-Control-Allow-Originによって許可されていません。」という結果になります。

ネットで調べてみましたが、使えるものが見つからないようです。理論的なものはたくさんありますが、実際のコードは十分ではなく、コードを入力し始めることができる理論的なものを理解していません。私が見たところ、2つの方法があります。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>

キャッシュバーストオプションが必要だと思います。ただし、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

クロスドメインでデータを取得する方法を有効にしない限り、クライアント側の JavaScript を介してこれを行うことはできません ( CORSJSONPcrossdomain.xmlファイルから読み取り権限を取得するいくつかのフラッシュ ウィジェット)サーバー上にあります...)

于 2012-11-07T00:39:22.087 に答える
0

簡単な答え: 10winstreak が JSONP サービスを提供しない限り、サーバー側で処理を行う必要があります。

少し長い答え:

セキュリティ上の理由から、ブラウザでは www.example.com から www.example2.com (または www.example.com 以外の他のドメイン) への AJAX リクエストを作成できません。JSONP を使用する以外に、これについてできることはあまりありません (リモート Web サービスがそれを提供している場合にのみ、JSONP を使用できます)。

したがって、最終的に行う必要があるのは、サーバーに「他のサーバーには何があるか?」と尋ねることです。そして (ブラウザのように制限されていないため) 他のサーバーから 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 に答える