2

我正在尝试访问某个面向成人的网站的 JSON api,但无法正常工作。这是 jsfiddle: http: //jsfiddle.net/SSqwd/这是代码:

$.ajax({url: 'http://api.redtube.com/?data=redtube.Videos.searchVideos&search=sex&thumbsize=big&page=1&output=json&callback=?',
    dataType: 'json',
    success: function(data) {
        console.log(data);
    }
});

我明白了

Uncaught SyntaxError: Unexpected token :

即使当我自己浏览页面并检查 jsonlint 上的 json 时,它也是完全有效的。

这里出了什么问题?

4

1 回答 1

4

由于您指定了跨域请求,jQuery 将默认尝试使用 JSONP 请求该 URL,即使您仅将 dataType 设置为 JSON。所以实际发生的是将以下脚本标签添加到 DOM 中:

<script src="http://api.redtube.com/?data=redtube.Videos.searchVideos&search=sex&thumbsize=big&page=1&output=json&callback=?" type="text/javascript"></script>

( ? 实际上被替换为 jQuery 生成的函数名)

然后,您的浏览器会尝试执行返回的数据。但是,由于它实际上不是 JSONP,而只是纯 JSON,因此它返回的是无效的 javascript,因此您会收到语法错误。

您只需使用以下命令即可重现相同的错误:

<script src="http://api.redtube.com/?data=redtube.Videos.searchVideos&search=sex&thumbsize=big&page=1&output=json&callback=?" type="text/javascript"></script>

并且什么都不做。或者您可以从该 URL 复制并粘贴响应并将其包装在脚本标签中,您将得到相同的错误。

解决此错误的唯一方法是使用支持 JSONP 的 API 或实现一种通过您自己的服务器在同一域上请求数据的代理。

于 2013-02-15T20:53:59.050 回答