无法使用jquery和ajax访问另一个域的有效json

时间:2013-02-15 20:11:02

标签: javascript jquery ajax json

我正在尝试访问某个面向成人的网站的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:意外的令牌:

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

这里出了什么问题?

1 个答案:

答案 0 :(得分:4)

由于您指定了跨域请求,因此即使您只将dataType设置为JSON,jQuery也会尝试使用JSONP请求该URL。所以实际发生的是将以下脚本标记添加到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或实现一种代理,该代理通过同一域上的您自己的服务器请求数据。