angular2 http.post到关闭的服务器=>;在Android上返回错误,但在IOS上不返回错误
我用的是角2,离子2 我关闭了我的应用程序向其发送请求的服务器,以检查脱机模式是如何管理的 我已经基于“@angular/HTTP”导入{HTTP,Headers,Response,RequestOptions,RequestMethod,Request}为我的项目创建了一个自定义HTTP服务。它包括一个“函数sendRequest”:angular2 http.post到关闭的服务器=>;在Android上返回错误,但在IOS上不返回错误,android,ios,angular,ionic2,angular2-http,Android,Ios,Angular,Ionic2,Angular2 Http,我用的是角2,离子2 我关闭了我的应用程序向其发送请求的服务器,以检查脱机模式是如何管理的 我已经基于“@angular/HTTP”导入{HTTP,Headers,Response,RequestOptions,RequestMethod,Request}为我的项目创建了一个自定义HTTP服务。它包括一个“函数sendRequest”: public sendRequest = (data):Observable<Response> => { // console.lo
public sendRequest = (data):Observable<Response> => {
// console.log("CustomHttpService->sendRequest() starts");
let headersToUse = new Headers();
headersToUse.append("Content-type",'application/x-www-form-urlencoded');
data = this.jsonToURLEncoded(data);
let options = { headers:headersToUse };
return this.http.post(this.url, data, options).map(
(res:Response)=>{
return res.json();
}
).catch(
this.handleErrorObservable
);
}
在安卓系统中,它可以工作,经过一段时间我进入日志:
URL:null的状态为0的handleError错误响应
但在IOS上,错误永远不会出现,就像没有设置超时一样。有什么提示吗?我个人更喜欢使用@angular/http的这个fomart来处理错误,它在整个过程中都能正常工作
this.http.post(url, data)
.map(res => res.json())
.subscribe((data) => {
// Use returned data
},
(err) => {
// Handle the error here
});
(err)
部分帮助处理所有与网络相关的错误,即使服务器处于脱机状态。希望这能有所帮助。我个人更喜欢使用@angular/http的这个fomart来处理错误,它在整个过程中都能正常工作
this.http.post(url, data)
.map(res => res.json())
.subscribe((data) => {
// Use returned data
},
(err) => {
// Handle the error here
});
(err)
部分帮助处理所有与网络相关的错误,即使服务器处于脱机状态。希望这能有所帮助。我通过在函数中的observable like上添加自定义超时设置来解决这个问题。现在看起来是这样的:
public sendRequest = (data):Observable<Response> | Observable<any> => {
// console.log("CustomHttpService->sendRequest() starts");
let headersToUse = new Headers();
headersToUse.append("Content-type",'application/x-www-form-urlencoded');
data = this.jsonToURLEncoded(data);
let options = { headers:headersToUse };
return this.http.post(this.url, data, options).timeoutWith(CustomHttpService.TIMEOUT_DELAY,Observable.throw(new Error(CustomHttpService.ERROR_REQ_HTTP))).map(
(res:Response)=>{
return res.json();
}
)
.catch(this.handleErrorObservable)
}
private handleErrorObservable (error:Response|any){
console.error(CustomHttpService.CLASS_TAG + " handlerErrorObservable: error.message " + error.message);
return Observable.throw(error.message);
}
public-sendRequest=(数据):可观察|可观察 我解决了这个问题,在我的函数中添加了一个自定义的超时设置。现在看起来是这样的:
public sendRequest = (data):Observable<Response> | Observable<any> => {
// console.log("CustomHttpService->sendRequest() starts");
let headersToUse = new Headers();
headersToUse.append("Content-type",'application/x-www-form-urlencoded');
data = this.jsonToURLEncoded(data);
let options = { headers:headersToUse };
return this.http.post(this.url, data, options).timeoutWith(CustomHttpService.TIMEOUT_DELAY,Observable.throw(new Error(CustomHttpService.ERROR_REQ_HTTP))).map(
(res:Response)=>{
return res.json();
}
)
.catch(this.handleErrorObservable)
}
private handleErrorObservable (error:Response|any){
console.error(CustomHttpService.CLASS_TAG + " handlerErrorObservable: error.message " + error.message);
return Observable.throw(error.message);
}
public-sendRequest=(数据):可观察|可观察 它给出了与以前相同的结果。该错误在Android中显示,但在IOS上没有显示。您是否尝试在safari浏览器中为应用程序提供服务,以查看http错误处理是否正常。我在safari中进行了ionic-serve
测试,我也遇到了同样的问题。它确实会在控制台中显示一条警告消息,表明请求已超时,但该消息与我的代码无关。它不会触发.catch(this.handleErrorObservable)
并且不会通过控制台.log(…)
显示错误。至少这个错误在苹果浏览器中是一致的。它给出了和以前相同的结果。该错误在Android中显示,但在IOS上没有显示。您是否尝试在safari浏览器中为应用程序提供服务,以查看http错误处理是否正常。我在safari中进行了ionic-serve
测试,我也遇到了同样的问题。它确实会在控制台中显示一条警告消息,表明请求已超时,但该消息与我的代码无关。它不会触发.catch(this.handleErrorObservable)
并且不会通过控制台.log(…)
显示错误。至少通过Apple浏览器,错误是一致的。