Angular简单JSON请求

时间:2014-01-03 08:54:36

标签: javascript json angularjs httprequest

这可能会让我看起来像一个初学者,我就是角度,但这是我的问题:

我正在尝试向.JSON api发出一个简单的请求,但我只是不断收到错误状态码。

var dataUrl = 'http://www.reddit.com/r/pics/comments/1ua1nb/.json?limit=2';

$http({method: 'GET', url: dataUrl}).
    success(function(data, status, headers, config)
    {
        window.alert('success:' + status);
    }).
    error(function(data, status, headers, config) {
        window.alert('error:' + status);
    });

更新

我通过浏览器检查了javascript控制台并收到以下错误消息:

不推荐使用event.returnValue。请改用标准的event.preventDefault()。 无法加载资源:服务器响应状态为501(未实现)http://www.reddit.com/r/pics/comments/1ua1nb/.json?limit=2 无法加载资源:请求的资源上没有“Access-Control-Allow-Origin”标头。原因......因此不允许访问。 http://www.reddit.com/r/pics/comments/1ua1nb/.json?limit=2 XMLHttpRequest无法加载http://www.reddit.com/r/pics/comments/1ua1nb/.json?limit=2。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问来源。

2 个答案:

答案 0 :(得分:2)

您正在尝试执行跨域请求。这是浏览器禁止的(它只允许您向最初加载页面的同一域发出请求)。这不是特定于角度的,而是一般的ajax请求。

你可以在这里阅读:

http://en.wikipedia.org/wiki/Same-origin_policy

有几种方法,例如JSONP和CORS。两者都需要服务器端支持。您必须查看您正在呼叫的服务,以查看它可能支持的服务。

您可以在此处阅读有关如何执行JSONP请求的信息:

http://docs.angularjs.org/api/ng。$ HTTP

答案 1 :(得分:0)

您不能访问其他网站上的资源。

你需要使用jsonp。

这是未经测试的修改后的代码,请尝试查看它是否正常工作:

var dataUrl = 'http://www.reddit.com/r/pics/comments/1ua1nb/.json?jsonp=JSON_CALLBACK&limit=2';

$http.jsonp(dataUrl).
    success(function(data, status, headers, config)
    {
        window.alert('success:' + status);
    }).
    error(function(data, status, headers, config) {
        window.alert('error:' + status);
    });

更多内容如下: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing