簡體   English   中英

使用YQL與JQuery進行跨域請求

[英]Cross-domain requests with JQuery using YQL

因此,我需要發出一個跨域請求,其中的響應不是JSON格式的,因此我不能使用.getJSON。 .get顯然不起作用,因為它是跨域請求。

我在谷歌搜索時遇到了這個問題( 閱讀本文 ),看來它應該可以實現我想做的事情(這是一個跨域調用,它不是使用jquery插件進行json格式化的)。 我的代碼如下所示。 我知道url可以正常工作,因為如果將其粘貼到瀏覽器中,我可以看到響應,根據last.fm文檔

服務器響應的主體由一系列\\ n(ASCII 10)終止的行組成。 典型的成功服務器響應如下所示:

OK
17E61E13454CDD8B68E8D7DEEEDF6170
http://post.audioscrobbler.com:80/np_1.2
http://post2.audioscrobbler.com:80/protocol_1.2

所以我知道我的網址很好。 現在,我想知道如何獲得這些信息,以及為什么我的示例版本不起作用。

function performHandshake(sk, token, ts){

    var token = md5(apiSecret + ts);
    var urlToUse = "http://post.audioscrobbler.com/?hs=true&p=1.2.1&c=tst&v=1.0&u=chamals&t=" + ts + "&a=" + token + "&api_key=" + apiKey + "&sk=" + sk + "&format=xml&callback=cbfunc";
            $('#container').load(urlToUse);
    $.ajax({
        url: urlToUse,
        type: 'GET',
        success: function(res){
            var headline = $(res.responseText).find('a.tst').text();
            window.console.log(headline);   
        }   
    });

}

是的,跨瀏覽器腳本。 您無法通過AJAX進行此類操作,因為它違反了相同的域策略。

您將必須在運行JavaScript的服務器上設置代理。

編輯看起來您需要$('#container').load(url)位才能正常工作。

返回並仔細閱讀鏈接文章。

好吧,您鏈接的頁面談到了使用YQL和jQuery。 這是一個非常有趣的解決方案。 但是,您的示例似乎跳過了YQL部分(這一點至關重要)。

var urlToUse = "http://post.audioscrobbler.com/?hs=true&p=1.2.1&c=tst&v=1.0&u=chamals&t=" + ts + "&a=" + token + "&api_key=" + apiKey + "&sk=" + sk + "&format=xml&callback=cbfunc";

var yqlUrl2Use = "http://query.yahooapis.com/v1/public/yql?"+
            "q=select%20*%20from%20html%20where%20url%3D%22"+
            encodeURIComponent(urlToUse)+
            "%22&format=xml'&callback=?"
    // this function gets the data from the successful 
    // JSON-P call

然后,您必須將調用新的URL作為JSONP請求調用。

$.getJSON(yqlUrl2Use, function(json){
    // figure out the format of the answer here...   
});

您需要使用$.getJSON而不是$.ajax()來返回跨站點信息。

var res實際上擁有我需要的信息。 我猜他們的標題=部分專門針對其實現。

感謝那些幫助!

暫無
暫無

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

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