0

所以我需要发出一个跨域请求,其中响应不是 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);   
        }   
    });

}
4

4 回答 4

1

是的,跨浏览器脚本。你不能 AJAX 任何类似的东西,因为它违反了相同的域策略。

您将不得不在运行 JavaScript 的同一台服务器上设置代理。

编辑看起来你需要$('#container').load(url)一点才能工作。

返回并仔细阅读链接的文章。

于 2010-07-08T18:30:34.087 回答
1

好吧,您链接的页面谈到了使用 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...   
});
于 2010-07-08T21:01:08.877 回答
0

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

于 2010-07-08T18:33:55.890 回答
0

var res 实际上有我需要的信息。我猜他们的标题 = 部分是专门为他们的实施而设计的。

感谢帮助过的人!

于 2010-07-08T21:00:02.823 回答