jqXHR - http-status-code-403(但状态码为0)

Pet*_*ter 10 javascript jquery xmlhttprequest http-status-code-403

我得到状态代码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;
    })
Run Code Online (Sandbox Code Playgroud)

演示 - > http://jsfiddle.net/QFuBr/

提前致谢!
彼得

lon*_*day 19

服务器向浏览器发出403错误,因为您没有访问资源的权限,因为报告了错误消息("请求的用户的收藏夹不公开".).

但是,服务器甚至没有在jsFiddle示例中获取请求.

您不能进行跨浏览器的AJAX请求.这称为同源政策.出于安全原因,防止恶意程序员在您不知情的情况下做出不愉快的事情.这是一个生硬的工具,但却是一个有效的工具.

如果您甚至没有向服务器发送请求,则没有状态代码.这由XMLHTTPRequest对象(及其jqXHR包装器)报告为0.

基本上,你不能在浏览器中做你想做的事情.

如果您需要浏览器以异步方式访问此类数据,则需要在服务器上编写一个包装器以从远程服务器获取信息并将其提供给浏览器.有一种解决方法(它称为JSONP - 带填充的JSON)但我不相信YouTube支持它.


编辑:每gradbot的答案,这是可以做到通过改变你的代码来设置JSONP请求dataTypejsonp.

但是,您现在无法使用xhr.status.这是因为JSONP不使用XHR对象,因此没有可用于检查的状态.

这是一个使用feed gradbot建议的工作示例.请注意,结果对象将传递给处理程序,而不是jqXHR对象.