簡體   English   中英

使用JavaScript請求遠程XML數據

[英]Requesting remote XML data with javascript

好的,這是我的問題。 我正在這個名為10winstreak的小型網站上工作,我試圖用JavaScript檢測流是否是實時的,因為我們運行該網站的服務器無法處理使用PHP處理每個請求的情況。 檢測流是否在線的基礎是您轉到其XML文件,並在其標簽之一(如果已在線)中說出正確的話,並且通常情況下,其站點上的XML文件為空如果沒有直播。 例如,如果您有twitch.tv的gamepot流,請訪問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)。”

我已經在網上調查了所有內容,但似乎找不到能夠使用的任何內容。 有很多理論知識,但實際代碼不足,我不理解理論知識,無法開始輸入代碼。 從我所看到的來看,您有2種方法可以使用JSONP或在服務器中的某處添加一行以允許跨域訪問。 我既不完全了解也不知道如何做。 有人告訴我需要采取什么措施來消除此錯誤,這對您有很多幫助。 當然,如果您可以向像我這樣的非編碼人員解釋它,那就更好了,但就目前而言,只要該代碼能滿足我的所有要求,它可能也很神奇。

你可以解決它:)

看看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。

簡短的答案:除非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 )。

我認為這是因為路徑不是相對的。 您可能是從其他域/子域調用的。 您可以允許其他來源訪問,這可能會打開安全漏洞,也可以在本地創建代理。

在PHP中,創建代理很容易: http : //blog.proxybonanza.com/programming/php-curl-with-proxy/現在,與其將您的請求直接定向到該URL,不如將其從jQuery發送到您自己的本地url並讓它在服務器端訪問它。

另一個選擇是使用YQL: http : //www.parrisstudios.com/? p = 333(我前一段時間寫過一篇文章)...這樣,您可以將響應轉換為JSON,可以將其轉換為JSON。訪問跨域(JavaScript也可以)。

您可以要求使用JSONP服務器和JSON返回所有API響應。

您將無法通過客戶端javascript執行此操作,除非他們啟用了某種方式來跨域檢索數據( CORSJSONP ,一些flash小工具從crossdomain.xml文件獲取讀取權限)位於他們的服務器上...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM