Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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
Angular ionic2 http post不向服务器发送请求,它在使用ionic serve的浏览器中工作得非常完美_Angular_Ionic2 - Fatal编程技术网

Angular ionic2 http post不向服务器发送请求,它在使用ionic serve的浏览器中工作得非常完美

Angular ionic2 http post不向服务器发送请求,它在使用ionic serve的浏览器中工作得非常完美,angular,ionic2,Angular,Ionic2,我正在使用发出HTTP POST请求 {email: "abc@cba.com", password: ******} 在ionic2中,angular2 问题:当我运行带有“ionic serve”的代码时,这项功能非常好。但是当我在安卓手机上安装apk时,我发现了下面的错误 在控制台中,它将POST请求显示为错误(请参阅屏幕截图) Http请求标头显示警告“显示临时标头”(请参阅屏幕截图) 代码: import { Injectable } from '@angular/core';

我正在使用发出HTTP POST请求

{email: "abc@cba.com", password: ******}
在ionic2中,angular2

问题:当我运行带有“ionic serve”的代码时,这项功能非常好。但是当我在安卓手机上安装apk时,我发现了下面的错误

  • 在控制台中,它将POST请求显示为错误(请参阅屏幕截图)
  • Http请求标头显示警告“显示临时标头”(请参阅屏幕截图)
  • 代码:

    import { Injectable } from '@angular/core';
    
    import { Events, Platform } from 'ionic-angular';
    import { Storage } from '@ionic/storage';
    import { Http, Response, Headers, RequestOptions } from '@angular/http';
    import { Observable } from 'rxjs/Rx';
    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/catch';
    import { Constants } from './constants';
    
    @Injectable()
    export class UserData {
      _favorites = [];
      HAS_LOGGED_IN = 'hasLoggedIn';
      HAS_SEEN_TUTORIAL = 'hasSeenTutorial';
      SESSION_OBJECT = 'loggedInSessionObject';
      constructor(
        public events: Events,
        public storage: Storage,
        private http: Http,
        public constants: Constants,
        public platform: Platform
      ) {
    
      }
    
    
      login(username:string, password:string): Observable<any> {
        var loginUrl = this.platform.is('android') || this.platform.is('ios') ? this.constants.BASE_URL + "/users/sessions" : "/users/sessions";
        console.log( loginUrl );
        let headers = new Headers();
        headers.append("Content-Type","application/json");
        let options = new RequestOptions({ headers: headers });
        var body: Object;
        body ={
              email: username,
              password: password
            } ;
        return this.http.post(loginUrl, JSON.stringify(body), { headers: headers })
              .map((res:Response) => {
                var sessionObject = res.json();
                if( sessionObject.code == 'SUCCESS' ){
                  this.storage.set(this.HAS_LOGGED_IN, true);
                  this.storage.set(this.SESSION_OBJECT,sessionObject);
                }
                return sessionObject;
              }
    
              )
              .catch((error:any) => Observable.throw(error.json().error || 'Server error'));
      };
    }
    
    从'@angular/core'导入{Injectable};
    从“离子角度”导入{Events,Platform};
    从'@ionic/Storage'导入{Storage};
    从'@angular/Http'导入{Http,Response,Headers,RequestOptions};
    从'rxjs/Rx'导入{Observable};
    导入'rxjs/add/operator/map';
    导入“rxjs/add/operator/catch”;
    从“./Constants”导入{Constants};
    @可注射()
    导出类用户数据{
    _收藏夹=[];
    已登录='hasLoggedIn';
    你看过教程吗;
    SESSION_OBJECT='loggedInSessionObject';
    建造师(
    公共事件:事件,
    公共存储:存储,
    私有http:http,
    公共常量:常量,
    公共平台:平台
    ) {
    }
    登录(用户名:string,密码:string):可观察{
    var loginUrl=this.platform.is('android')| | this.platform.is('ios')?this.constants.BASE_URL+“/users/sessions”:“/users/sessions”;
    控制台日志(loginUrl);
    let headers=新的headers();
    headers.append(“内容类型”、“应用程序/json”);
    let options=newrequestoptions({headers:headers});
    主体:客体;
    身体={
    电子邮件:用户名,
    密码:密码
    } ;
    返回this.http.post(loginUrl,JSON.stringify(body),{headers:headers})
    .map((res:Response)=>{
    var sessionObject=res.json();
    if(sessionObject.code=='SUCCESS'){
    this.storage.set(this.HAS_登录,true);
    this.storage.set(this.SESSION\u对象,sessionObject);
    }
    返回sessionObject;
    }
    )
    .catch((error:any)=>Observable.throw(error.json().error | |“服务器错误”);
    };
    }
    
    据我所知,它表明您的api头访问控制有问题。 您需要根据您的API平台启用API端的访问控制允许源站,或者我可以说您需要启用API端的cors

    例如:

    如果您在API端使用php,则可以通过以下方式启用它:

    <?php
            header('Access-Control-Allow-Origin: http://admin.example.com');  //I have also tried the * wildcard and get the same response
            header("Access-Control-Allow-Credentials: true");
            header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
            header('Access-Control-Max-Age: 1000');
            header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
        ?>
    

    我遇到了这个毫无头绪的问题,ionic2应该以更好的方式记录错误以显示实际错误

    问题的根本原因:
    Androidmanifest.xml
    没有添加权限

    解决方案:将以下行添加到
    Androidmanifest.xml
    解决了我的错误


    使用图像按钮设置有问题的图像。是的,我已启用cors,正在使用ROR。但它仍然不起作用。同样的API也在Ionic v1应用程序中使用,并且正在运行。我也尝试过这些方法,1)正确添加了cordova白名单插件2)启用了cors 3)添加到config.xml
    中的下一行注意:请求甚至没有到达服务器