我得到了状态代码0 ..。但这是代码403。有人能告诉我问题出在哪里吗?
JQUERY
var jqxhr = $.ajax({
url: 'http://gdata.youtube.com/feeds/api/users/bernd/favorites?alt=json',
dataType: 'json'
}).success(function(xhr) {
alert(xhr.status);
}).error(function(xhr) {
alert(xhr.status);
return false;
})演示 -> http://jsfiddle.net/QFuBr/
提前感谢!
彼得
发布于 2011-04-16 20:28:46
您需要设置dataType: "jsonp",并且您需要以用户的身份登录以获取收藏夹。在本例中,我使用自己的用户名grabot,警报返回为成功。
如果您对试图访问的帐户没有有效的cookie,那么api调用将返回一个包含内容"Favorites of requested user are not public."的"Favorites of requested user are not public."。
$(function() {
var jqxhr = $.ajax({
url: 'http://gdata.youtube.com/feeds/api/users/gradbot/favorites?alt=json',
dataType: 'jsonp'
}).success(function(data, status) {
alert(status);
}).error(function(xhr) {
alert(xhr.status);
})
});发布于 2011-04-16 21:00:43
403是因为您需要为其视频被访问的用户提供凭据。假设提供了正确的凭据,由于跨域限制,请求仍将失败。
在大多数情况下,状态代码0意味着无法将请求发送到服务器。以下是Chrome控制台日志显示的小提琴示例。
XMLHttpRequest无法加载http://gdata.youtube.com/feeds/api/users/bernd/favorites?alt=json。访问控制-允许-原产地不允许使用http://fiddle.jshell.net .
Youtube,实际上所有Google数据API的支持JSONP,但是要使用它,您必须传递一个带有值json-in-script的alt参数,并将dataType指定为jsonp。jQuery将为您提供回调参数。根据经验测试,Youtube似乎并不关心alt参数,特别是json-in-script参数。只要指定了callback参数,alt参数就可以只取值json。
http://gdata.youtube.com/feeds/api/users/gradbot/favorites?alt=json http://gdata.youtube.com/feeds/api/users/gradbot/favorites?alt=json&callback=foo
下面是一个可公开访问的提要的工作实例。
$.ajax({
url: 'http://gdata.youtube.com/feeds/mobile/videos?alt=json-in-script',
dataType: 'jsonp',
success: function(data) {
// do something with data
}
});发布于 2011-04-16 20:29:44
由于大多数现代浏览器的安全性限制,您无法进行跨域请求(无论是GET请求还是POST请求)。
如果仍然希望从其他域获取数据,请考虑使用安装在服务器上的反向代理并发送所有请求。对于浏览器来说,数据仍然是来自同一个域。
Apache中最流行的一种是mod_reverse,但是根据服务器环境的不同,还有其他的选择。
如果Google支持JSONP,另一种选择是用户JSONP。
https://stackoverflow.com/questions/5661813
复制相似问题