我使用AngularJS开发了一款应用。
它存在于以下网址但由于加载模板上的CORS问题而无法正常工作: http://www.ebust.it/app/#/lines/list
该应用在没有" www"的网址上正常运行: http://ebust.it/app/#/lines/list
我从js console获得的错误:
XMLHttpRequest cannot load http://ebust.it/themes/frontend/spa/app/views/lines.html. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.ebust.it' is therefore not allowed access.
我还试图将模板强制为绝对URL。你有过类似的经历吗?我无法理解为什么Angular使用错误的域来执行模板URL的AJAX请求。
答案 0 :(得分:2)
当重定向脚本请求时,$http
Ajax请求成为跨域请求:
<script src="/themes/frontend/spa/app/scripts/controllers/line.js"></script>
curl -v http://www.ebust.it/themes/frontend/spa/app/scripts/services/line.js
...
< HTTP/1.1 301 Moved Permanently
...
< Location: http://ebust.it/themes/frontend/spa/app/scripts/services/line.js
...
每个脚本都与提供它的源http://ebust.it/
相关联,而不是文档的http://www.ebust.it/
。
要解决此问题,您可以:
从两个来源提供脚本而不是重定向。
指定在Ajax URL中提供脚本的主机名:
return $http({
// ...
url: '//ebust.it/line/georeverse'
});
使用document.domain
调整原点。
document.domain = 'ebust.it';
url: '//' + document.domain + '/line/georeverse'
或者配置CORS以允许两个来源之间的请求。
答案 1 :(得分:1)
您是否尝试过相对网址而不是绝对网址?你用什么路由? UI的路由器?理想情况下,如果您使用ngRouter或ui-router,如果您提供相对路径,这不会导致CORS问题。只有当您提供绝对(和不正确的,即属于不同的域)URL
时,CORS才会出现答案 2 :(得分:0)
您可以使用window.location.hostname
或Angular方式$location.host()
来获取相应的“www.ebust.it”或“ebust.it”,并通过连接主机的路径来加载模板。< / p>