【发布时间】:2019-09-21 00:18:36
【问题描述】:
我制作了一个 Angular 应用程序,它可以使用在线 api 来获取 json 并做一些事情。 但是,虽然 json 是相同的,但如果我尝试通过设置用 django 编写的服务器的本地 url 来仅更改 json 的 url,则 angular 似乎不再连接......
我的问题是,为什么如果使用在线云服务器可以使用,而使用本地服务器则不行?
我尝试让这台服务器“在云上”打开路由器的端口,还设置了一个 ddns,并使用邮递员或浏览器似乎可以工作,但是当我尝试使用 angular 连接时,它仍然无法获取数据...
我确信 100% 服务器会使用正确的 json 数据进行回答,因为 django 在控制台上打印出他收到了 HTTP GET 请求: http://i.imgur.com/TIQnIcR.png
我提醒你,HTTP 角度请求与另一个 api 一起工作,但我仍会显示一些代码:
export class ProdottoService {
private prodotti: Array<ProdottoModel>;
constructor(private httpClient: HttpClient) {
this.prodotti = new Array<ProdottoModel>();
var url:string = "https://gist.githubusercontent.com/saniyusuf/406b843afdfb9c6a86e25753fe2761f4/raw/523c324c7fcc36efab8224f9ebb7556c09b69a14/Film.JSON";
var local_url:string = "http://127.0.0.1:8000/films/?format=json";
httpClient.get(local_url)
.subscribe((films : Array<Object> ) => {
films.forEach((film => {
this.prodotti.push(new ProdottoModel(film));
}));
}
);
}
getProdotti(): Array<ProdottoModel> {
return this.prodotti;
}
}
使用外部 api 的结果:
http://i.imgur.com/MT7xD9c.png
感谢您的任何帮助:3
-- 编辑 -- 是一个 CORS 问题
在 django settings.py 文件中:
CORS_ORIGIN_WHITELIST = (
'localhost:8000',
'127.0.0.1:4200'
)
INSTALLED_APPS = (
...
'corsheaders',
...
)
MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
但我不知道是否有办法在 Angular 中设置 CORS 设置
【问题讨论】:
-
这里是服务器django的代码,前端的角码:github.com/fl0wo/films-angular-django
-
是什么让您认为您没有获取 json?如果您使用的是 Chrome,请打开网络选项卡并查看您的应用程序是否正在拨打电话(您的服务器似乎正在接到电话?)。
-
这是在 Chrome 上刷新标签时发生的情况:i.imgur.com/ZVEWSHd.png 是的,服务器显然通知我他刚刚回答了一个 GET 请求...