所以我需要制作一个跨域请求,其中响应不是JSON格式的,所以我不能使用.getJSON。 .get显然不起作用,因为它是一个跨域请求。
当我在使用谷歌搜索时,我遇到了这个(Read this),它似乎应该适用于我想要做的事情(这是一个跨域调用,不是使用jquery插件进行json格式化) 。我的代码如下所示。我知道网址工作正常,因为如果我将其粘贴到我的浏览器中,我可以看到响应,根据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);
}
});
}
答案 0 :(得分:1)
是的,跨浏览器脚本。你不能AJAX这样的东西,因为它违反了相同的域策略。
您将不得不在运行JavaScript的同一服务器上设置代理。
编辑看起来您需要$('#container').load(url)
位才能正常工作。
仔细阅读重新阅读链接的文章。
答案 1 :(得分: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...
});
答案 2 :(得分:0)
您需要使用$.getJSON
而不是$.ajax()
来返回跨站点信息。
答案 3 :(得分:0)
var res实际上有我需要的信息。我猜他们的标题=部分是专门针对他们的实施。
感谢那些帮助过的人!