5

这是我第一次在 jQuery 中使用 Facebook。

我收到以下错误:

Uncaught SyntaxError: Unexpected token : 
www.facebook.com/feeds/page.php?id=20531316728&format=JSON
    &callback=jQuery110105899784066714346_1383828332964&_=1383828332965:2

代码

$.ajax({
    url: 'http://www.facebook.com/feeds/page.php?id=20531316728&format=JSON',
    dataType: 'jsonp'
}).done(function(data) {
    alert(data);
});

JSFiddle

为什么我会得到这个?

4

1 回答 1

5

为什么它不起作用?

jQuery 作为一个 Javascript 框架,必须应用 Ajax 请求的实现规则,更具体地说是同源策略之一。简而言之,这个限制表明 Ajax 请求只能针对同一个域执行。

这些信息也可以在 jQuery$.ajax文档中找到:

由于浏览器安全限制,大部分“Ajax”请求都受同源策略的约束;请求无法从不同的域、子域或协议成功检索数据。

解决方法

YQL:雅虎查询语言

Yahoo Query Language 是一种表达能力强的类 SQL 语言,可让您跨 Web 服务查询、过滤和连接数据。使用 YQL,应用程序运行速度更快,代码行数更少,网络占用空间更小。

来源:http: //developer.yahoo.com/yql/

使用 YQL 作为代理

YQL 可用作代理,以使跨域 Ajax 调用成为可能。可以在此处找到说明:JavaScript:使用 Web 代理进行跨域 XMLHttpRequest 调用

代码

var fbUrl = "http://www.facebook.com/feeds/page.php?id=20531316728&format=JSON";

$.ajax({
    url: "http://query.yahooapis.com/v1/public/yql",
    dataType: "jsonp",
    data: {
        q: 'select * from json where url="' + fbUrl + '"',
        format: "json"
    },
    success: function (data) {
        $.each(data.query.results.json.entries, function (i, v) {
            $('#entries').append(data.query.results.json.entries[i].title + '<br />');
        });
    }
});

jsFiddle here

于 2013-11-08T14:00:09.973 回答