【发布时间】:2017-09-29 22:41:06
【问题描述】:
我有一个 Angular 4 前端和一个 CakePHP 3 后端。当我使用浏览器或 Rest Client 向 API 端点发出请求时,我会收到响应。但是,当我从角度服务发送响应时,它会立即在网络中显示已取消。
起初我认为这是一个 CORS 问题。我已经尝试过启用和不启用 CORS。我还在我的 AppController.php 中添加了$this->Security->csrfCheck = false;,这让我相信本地服务器永远不会被命中(没有断点被触发)。
因此,我正在研究等式的 Angular 方面。我试图设置我的标题,但这也不起作用。
import { Headers, Http, Response, RequestOptions } from '@angular/http';
login(loginData) {
const headers = new Headers({'Content-Type': 'application/json'});
const url:string = this.backendUrl + '/auth/login/?';
return this.Http.post(
url,
JSON.stringify(loginData),
{ headers: headers }
).map(
res => res.json
).map(
response => function(response) {
...
},
error => function(error) {
...
}
);
}
我正在从 1 迁移到 4。所以我知道它可以在 Angular 1 中使用 $http 请求。
function login(loginData) {
var = this.backendUrl + '/auth/login/?';
$http.post(url, loginData).then( ... );
}
这是我使用订阅的组件:
login = function(activeUser):ActiveUser|boolean {
this.isLoggingIn = true;
return this.LoginService.login(activeUser).subscribe(
activeUser => function(activeUser) {
if (activeUser) {
this.activeUser = activeUser;
} else {
this.reset();
}
return activeUser;
}.bind(this)
).complete(
function() {
this.isLoggingIn = false;
}.bind(this)
);
};
【问题讨论】:
-
angular http observables 默认是冷的。这意味着您的登录功能只是设置http请求。要真正发起 http 请求,您必须订阅可观察的 this.login.subscribe();
-
这个问题略有不同,正在向网络发起呼叫并被取消。我的问题似乎与未正确设置订阅方法有关。另一个问题是完全缺少导致根本没有调用的 subscribe 方法。不过,它帮助我走上了正轨,谢谢!
标签: angular cors cakephp-3.0