Javascript AngularJS从其他域请求JSON
我试图用以下代码从WikiaAPI检索数据。但一切似乎都失败了。据我所知,CORS必须在我试图从中检索数据的服务器上启用。然而,我不知道Wikia的情况是否如此。所以JSONP似乎是唯一的方法。但是我得到了错误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
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