Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
angular2 http.post到关闭的服务器=>;在Android上返回错误,但在IOS上不返回错误_Android_Ios_Angular_Ionic2_Angular2 Http - Fatal编程技术网

angular2 http.post到关闭的服务器=>;在Android上返回错误,但在IOS上不返回错误

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

我用的是角2,离子2

我关闭了我的应用程序向其发送请求的服务器,以检查脱机模式是如何管理的

我已经基于“@angular/HTTP”导入{HTTP,Headers,Response,RequestOptions,RequestMethod,Request}为我的项目创建了一个自定义HTTP服务。它包括一个“函数sendRequest”:

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浏览器,错误是一致的。