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

标签 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;
    })

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

提前致谢!
彼得

最佳答案

服务器给浏览器一个 403 错误,因为你没有访问资源的权限,因为报告了错误消息(“请求用户的收藏夹不公开。”) .

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

您不能发出跨浏览器的 AJAX 请求。这称为 same-origin policy .这是出于安全原因,以防止恶意编码者在您不知情的情况下做出不愉快的事情。这是一种生硬的工具,但却是一种有效的工具。

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

基本上,您无法在浏览器中执行您想执行的操作。

如果您需要浏览器像这样异步访问数据,则需要在您的服务器上编写一个包装器以从远程服务器获取信息并将其提供给浏览器。有一个解决方法(称为 JSONP – JSON with Padding)但我认为 YouTube 不支持它。


编辑:根据 gradbot's answer ,可以通过更改代码将 dataType 设置为 jsonp 来执行 JSONP 请求。

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

Here's a working example using the feed gradbot suggested .请注意,结果对象被传递给处理程序,而不是 jqXHR 对象。

关于javascript - jqXHR - http-status-code-403(但状态码为 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661813/

相关文章:

javascript - Android/iOS WebView 未遵循 CORS HTTP 重定向 (30x)

javascript - 将带有参数的 javascript 函数分配给变量会立即被调用

javascript - 如何使用 javascript 自动将文件发布到表单

javascript - 悬停div jquery

javascript - 如何在 react js中使用json在表中显示数据?

javascript - 在 D3.js 中,有没有办法绑定(bind) x 和 y 方向上的滚动事件来平移 svg?

javascript - 如何在 jQuery UI Slider 中将 slider 指针移动到 slider 刻度中的特定点?

xml - 使用 jQuery 发送 XML 请求

javascript - 在 JavaScript 中格式化日期

javascript - 如何柯里化(Currying) jQuery 方法——哪个 `this` 值将传递 jQuery 对象?