Javascript AngularJS从其他域请求JSON

Javascript AngularJS从其他域请求JSON,javascript,ajax,json,angularjs,cors,Javascript,Ajax,Json,Angularjs,Cors,我试图用以下代码从WikiaAPI检索数据。但一切似乎都失败了。据我所知,CORS必须在我试图从中检索数据的服务器上启用。然而,我不知道Wikia的情况是否如此。所以JSONP似乎是唯一的方法。但是我得到了错误 XMLHttpRequest无法加载http://adventuretime.wikia.com/api/v1/Articles/List?expand=1&category=Episodes&limit=200. 请求的资源上不存在“Access Control Allow Origi

我试图用以下代码从WikiaAPI检索数据。但一切似乎都失败了。据我所知,CORS必须在我试图从中检索数据的服务器上启用。然而,我不知道Wikia的情况是否如此。所以JSONP似乎是唯一的方法。但是我得到了错误

XMLHttpRequest无法加载http://adventuretime.wikia.com/api/v1/Articles/List?expand=1&category=Episodes&limit=200. 请求的资源上不存在“Access Control Allow Origin”标头。起源'http://website.com因此,不允许访问。

我读过AngularJS文档:$http

学校:

还有很多关于stackoverflow的问题。我的代码有什么严重的错误吗?Angular应该本地支持CORS和JSONP请求

我的代码如下:

Index.html

<!DOCTYPE html>
<html ng-app="episodes">
<head>
    <meta charset="UTF-8">
    <title>Episodes</title>
    <script src="angular.js"></script>
    <script src="workshop.js"></script>
</head>
<body ng-controller="AppController as app">

    <table>
        <thead> 
            <tr>
                <th>Title</th>
                <th>Url</th>
            </tr>
        </thead>
        <tbody>
            <tr ng-repeat="episode in app.episodes">
                <td>{{episode.title}}</td>
                <td>{{episode.url}}</td>
            </tr>
        </tbody>
    </table>

</body>
</html>
感谢您的帮助

提前谢谢你的帮助

编辑

响应标题为:

Content-Encoding: gzip
X-Content-Type-Options: nosniff
X-Cacheable: YES
Age: 0
X-Cache: ORIGIN, MISS, MISS
Content-Length: 21965
X-Served-By: ap-s21, cache-wk-sjc3160-WIKIA, cache-fra1233-FRA
X-Backend-Response-Time: 2.267
Server: Apache
X-Timer: S1439118796.704444,VS0,VE2447
Vary: Accept-Encoding
Content-Type: application/json; charset=utf-8
Cache-Control: public, max-age=86400
Accept-Ranges: bytes
X-Cache-Hits: ORIGIN, 0, 0
尝试使用
$http.jsonp(url)用于跨域请求

尝试使用
$http.jsonp(url)用于跨域请求

据我所知,必须在服务器上启用CORS

然而,我不知道Wikia的情况是否如此

由于您收到错误消息:

无“访问控制允许来源”标题

…它未启用


所以JSONP似乎是唯一的方法

JSONP是一种围绕同源策略工作的黑客。它不像CORS(设计用于提供显式权限)那样优雅,但它要求服务器用JSONP表达数据

错误消息:

拒绝从“*&callback=JSON\u callback”执行脚本,因为其MIME类型(“应用程序/JSON”)不可执行,并且启用了严格的MIME类型检查

这意味着对HTTP请求的响应不是JSONP(它将具有
应用程序/javascript
内容类型),因此服务器不支持它


未经请求所在站点的明确许可,网站无法指示web浏览器向另一台服务器发出HTTP请求并对其JavaScript做出响应

您需要寻找一种替代方法,其中对服务器的请求不是来自浏览器。e、 g.通过自己的服务器代理请求

据我所知,必须在服务器上启用CORS

然而,我不知道Wikia的情况是否如此

由于您收到错误消息:

无“访问控制允许来源”标题

…它未启用


所以JSONP似乎是唯一的方法

JSONP是一种围绕同源策略工作的黑客。它不像CORS(设计用于提供显式权限)那样优雅,但它要求服务器用JSONP表达数据

错误消息:

拒绝从“*&callback=JSON\u callback”执行脚本,因为其MIME类型(“应用程序/JSON”)不可执行,并且启用了严格的MIME类型检查

这意味着对HTTP请求的响应不是JSONP(它将具有
应用程序/javascript
内容类型),因此服务器不支持它


未经请求所在站点的明确许可,网站无法指示web浏览器向另一台服务器发出HTTP请求并对其JavaScript做出响应


您需要寻找一种替代方法,其中对服务器的请求不是来自浏览器。e、 g.通过自己的服务器代理请求。

JSONP也必须得到服务器的支持。(返回的JS代码片段需要调用您的回调。)@Noah您能解释一下回调吗?服务器似乎支持JSONP,但我现在遇到了一个MIME错误。Wikipedia关于这个主题的文章解释说:JSONP也必须得到服务器的支持。(返回的JS代码片段需要调用您的回调。)@Noah您能解释一下回调吗?服务器似乎支持JSONP,但我现在遇到了一个MIME错误。Wikipedia关于这个主题的文章解释说:哇,它似乎可以工作,让我请求数据!我认为简写jsonp方法将等同于
数据类型:“jsonp”
方式。使用我的代码:
app.fetch=function(){$http.jsonp(“http://adventuretime.wikia.com/api/v1/Articles/List?expand=1&category=Episodes&limit=200&callback=JSON_CALLBACK)然后(函数(结果){return results.data.items;});}它抛出错误:
拒绝执行来自“*&callback=JSON\u callback”的脚本,因为它的MIME类型(“应用程序/JSON”)不可执行,并且启用了严格的MIME类型检查。
谢谢again@KlamHuggeren然后使用您的服务器。只是:
echo文件\u获取\u内容('http://adventuretime.wikia.com/api/v1/Articles/List?expand=1&category=Episodes&limit=200');http.get('link_to_You_fn').success(函数(数据){})在JS上;你是对的!我使用file_get_contents方法和$http.get在Angular控制器中创建了php文件<代码>$http.get('get.php').success(函数(结果){app.scents=results.items;})哇-它似乎工作,让我要求的数据!我认为简写jsonp方法将等同于
数据类型:“jsonp”
方式。使用我的代码:
app.fetch=function(){$http.jsonp(“http://adventuretime.wikia.com/api/v1/Articles/List?expand=1&category=Episodes&limit=200&callback=JSON_CALLBACK)然后(函数(结果){return results.data.items;});}它抛出错误:
拒绝执行来自“*&callback=JSON\u callback”的脚本,因为它的MIME类型(“应用程序/JSON”)不可执行,并且启用了严格的MIME类型检查。
谢谢again@K
Content-Encoding: gzip
X-Content-Type-Options: nosniff
X-Cacheable: YES
Age: 0
X-Cache: ORIGIN, MISS, MISS
Content-Length: 21965
X-Served-By: ap-s21, cache-wk-sjc3160-WIKIA, cache-fra1233-FRA
X-Backend-Response-Time: 2.267
Server: Apache
X-Timer: S1439118796.704444,VS0,VE2447
Vary: Accept-Encoding
Content-Type: application/json; charset=utf-8
Cache-Control: public, max-age=86400
Accept-Ranges: bytes
X-Cache-Hits: ORIGIN, 0, 0