Angular ionic2 http post不向服务器发送请求,它在使用ionic serve的浏览器中工作得非常完美
我正在使用发出HTTP POST请求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';
{email: "abc@cba.com", password: ******}
在ionic2中,angular2
问题:当我运行带有“ionic serve”的代码时,这项功能非常好。但是当我在安卓手机上安装apk时,我发现了下面的错误
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
中的下一行注意:请求甚至没有到达服务器