ios - Ionic 3 HTTP 请求在 ios 上不起作用,但在 android 上起作用?
问题描述
我有一个调用 Spring Boot API 以登录移动应用程序的 Ionic 3 应用程序,我的 Spring Boot 应用程序托管在 Aws 中。它适用于 android 但它不适用于 ios,它说交叉问题我尝试了许多来自互联网的解决方案但没有得到结果。
我得到的错误是
响应状态:0 用于 url:null
这是我的工作弹簧启动控制器
@CrossOrigin
@RestController
@RequestMapping("/api/customerr")
public class loginController extends NamedParameterJdbcDaoSupportClass{
@Autowired
LoginService loginService;
@Autowired
LoginValidation loginValidation;
@RequestMapping(value="/getUser", method = RequestMethod.POST)
public Response getUsers( @RequestBody UserRequest userRequest ) throws Exception {
List<User> users = null;
try {
loginValidation.getUsers(userRequest.getSsoid(), userRequest.getPassword() );
} catch (ValidationExceptions ex) {
ex.printStackTrace();
return new Response("400", ex.getMessage());
}
try {
users = loginService.getUsers(userRequest.getSsoid(),userRequest.getPassword() );
} catch (Exception ex) {
return new Response("400", ex.getMessage());
}
for(User u: users )
{
if(u.getStatus().getStatusId() == 2)
{
return new Response("300", u.getSsoid());
}
}
return new Response("200", users);
}
}
这是我的离子提供者/服务
import { Http, Response} from '@angular/http';
import { Injectable } from '@angular/core';
@Injectable()
export class loginService {
data:any;
constructor(public http : Http){}
getAllUsers(authData){
alert("api users")
return new Promise(resolve=>{
this.http.post('http://someAddress:8080/api/customerr/getUser', authData)
.map(res=>res.json())
.subscribe(data=>{
this.data=data;
resolve(this.data)
})
})
}
}
这是我调用 api 的登录页面
import { Component, ViewChild } from '@angular/core';
import { Alert,AlertController,IonicPage,Loading,LoadingController,NavController,MenuController } from 'ionic-angular';
import { FormBuilder, FormGroup, Validators, NgForm } from '@angular/forms';
import { EmailValidator } from '../../validators/email';
import { CustomerPage } from '../customer/customer';
import { loginService } from '../../providers/loginservice/login.servie';
import {Response} from '@angular/http';
import { ToastController } from 'ionic-angular';
import { CustomerdetailsPage } from '../customerdetails/customerdetails';
@IonicPage()
@Component({
selector: 'page-login',
templateUrl: 'login.html',
})
export class LoginPage {
@ViewChild('f') loginForm: NgForm;
loginResponse:any;
constructor(
public navCtrl: NavController,
public loadingCtrl: LoadingController,
public alertCtrl: AlertController,
public menu:MenuController,
private loginservice : loginService,
private toastCtrl: ToastController
){
}
ionViewWillEnter(){
this.menu.enable(false)
}
ionViewWillLeave(){
this.menu.enable(true)
}
loginUser() {
console.log("login data");
console.log(this.loginForm.value);
this.loginservice.getAllUsers(this.loginForm.value).then(
(data:any) =>
{
this.loginResponse = data.json();
alert("data");
alert(this.loginResponse.code);
if(this.loginResponse.code === '200')
{
if(this.loginResponse.data.length !== 0)
{
let key1 = 'islogIn';
localStorage.setItem(key1, "true");
this.navCtrl.setRoot(CustomerPage);
}
else if(this.loginResponse.data.length == 0)
{
let toast = this.toastCtrl.create({
message: 'invalid username or password',
duration: 3000,
position: 'bottom'
});
toast.onDidDismiss(() => {
console.log('Dismissed toast');
});
toast.present();
}
}
else if (this.loginResponse.code === '300')
{
let toast = this.toastCtrl.create({
message: 'user is deactivated',
duration: 3000,
position: 'bottom'
});
toast.onDidDismiss(() => {
console.log('Dismissed toast');
});
toast.present();
}
},
(error)=>{
alert(error);
}
);
}
}
这就是 app.module.ts
@NgModule({
declarations: [
..
LoginPage,
...
],
imports: [
BrowserModule,
HttpClientModule,
HttpModule,
IonicStorageModule.forRoot(),
IonicModule.forRoot(MyApp),
],
bootstrap: [IonicApp],
entryComponents: [
.
.
LoginPage,
.
.
],
providers: [
Network,
StatusBar,
SplashScreen,
{provide: ErrorHandler, useClass: IonicErrorHandler},
Storage,
SocialSharing,
File,
FileOpener,
DatabaseProvider,
SQLitePorter,
SQLite,
GlobalProvider,
PageserviceProvider,
loginService,
syncService
]
})
export class AppModule {}
解决方案
请为 IOS 使用 Native HTTP API
推荐阅读
- vim - Vim:重新映射除视觉之外的所有模式
- thymeleaf - Thymeleaf 对 onmouseover 处理程序的限制
- python - 从 np.datetime64 转换为浮点年
- google-bigquery - 如何根据数组条件加入 2 个表包含
- vue.js - 在 Gridsome 中生成文档索引
- xamarin.forms - 如何更改所选项目的颜色?
- android - Android Firebase Datasnapshot - 空对象错误
- android - 未收到通知,但在 Android 中使用 Firebase 和 Retrofit2 似乎发送成功
- reactjs - 动作正在更新状态,但来自 mapStateToProps 的道具在组件中显示为未定义
- firebase - 移至 FCM 旧版 HTTP API