我试图开火,忘记请求,但是我尝试的所有选项均无效。
该场景是在完成一个可订阅的请求之后,我将重定向到其他页面,但是在执行重定向之前,我应该再触发一个请求,而无需等待其响应。以下是我现在拥有的示例。
FormData.ts
sendData(){
const ci = this;
this.apiService.sendData(url, body, headers).subscribe(res => {
ci.sendFireAndForget();
window.location.href= this.tyredirect+".html";
});
}
sendFireAndForget(){
//construct the body
this.apiService.sendFireAndForget(url2, body);
}
APIService.ts
sendData(url, body, headers){
return this._http.post(url, JSON.stringify(body), headers).map((res: Response) => res.json());
}
sendFireAndForget(emailUrl, body){
let requestOptions = createHeader();
this._http.post(emailUrl, body, requestOptions);
}
所以我不想知道响应是什么,因此我没有subscribe
或toPromise()
到第二个请求。但是,如果我不这样做,该请求将不会被触发。
但是如果我执行subscribe()
或toPromise()
,由于重定向,我将收到 CORS失败错误。
现在,如果我删除了重定向,那么一切都会按预期进行。 在这种情况下,我该如何编写即发即忘方法?
PS -两个请求的Urls都发送到外部服务器。
编辑1
在这种情况下,window.location.href
在获取CORS方面是否存在任何问题?
答案 0 :(得分:1)
Angular中的http API返回一个可观察的对象,并且由于可观察的对象本质上是惰性的,因此除非您订阅它们,否则它不会做任何事情。
您可以简单地执行以下操作:
ci.sendFireAndForget().subscribe(() => window.location.href= this.tyredirect+".html");
如果您不想订阅,我建议您为此使用简单的XMLHttpRequest:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send