状态为0的URL响应:null –在模拟器或Web中运行时出现此错误

时间:2019-06-30 11:25:53

标签: ionic-framework ionic4

我正在使用Ionic框架开发一个基于移动女仆的简单应用程序,并且在后端使用laravel。在网络或Android模拟器中运行该错误时,我收到“状态响应:URL的响应为0:空”。

我无法注册新用户,当我使用POSTMAN检查我的静态API时,它可以工作,并且我可以注册新用户。但是,当我在模拟器中运行此应用时,它会继续显示此“状态为0的响应:URL:空”错误。

 **auth-service.ts file**

import { Injectable } from '@angular/core';
import {Http, Headers} from '@angular/http'
import 'rxjs/add/operator/map';

let apiUrl = 'http://fypBackend.test/api/';

@Injectable({
  providedIn: 'root'
})
export class AuthServiceService {

  constructor(public http: Http) { }

  register(data){
    return new Promise((resolve, reject) => {
      let headers = new Headers();
      headers.append('Content-Type', 'application/json');

      this.http.post(apiUrl+'users', JSON.stringify(data), {headers: headers})
      .subscribe(res => {
        resolve(res.json());
      }, (err) => {
        console.log('Not Working')
        reject(err);
      });
    });
  }
}

**register.ts file**

import { Component} from '@angular/core';
import { NavController,LoadingController, ToastController } from '@ionic/angular';
import {AuthServiceService} from '../auth-service.service';


@Component({
  selector: 'page-register',
  templateUrl: './register.page.html',
  styleUrls: ['./register.page.scss'],
})
export class RegisterPage{
  loading: any;
  regData = {name: '', icNumber: '', email: '', 
            password: '', phone: '', address: '', 
            cityState: '', houseType: '', category:''};
  

  constructor(public navCtrl: NavController, public authService: AuthServiceService, public loadingCtr: LoadingController, private toastCtrl: ToastController) { }

  doSignup(){
    this.authService.register(this.regData).then((result)=>{
      this.loading.dismiss();
      this.navCtrl.pop();
    }, (err) => {
      this.presentToast(err);
    });
  }
  async presentToast(msg){
    const toast  = await this.toastCtrl.create({
      message: msg,
      duration: 3000,
      position: 'top',
      color: 'dark',
    });
    toast.present();
  }
}

**register.html file**
<ion-content padding>
  <h2>Register Here</h2>
  <form (submit) = "doSignup()">
    <ion-item>
      <ion-label stacked>Username</ion-label>
      <ion-input [(ngModel)] = "regData.name" name = "name" type="text" placeholder = "Your Name"></ion-input>
    </ion-item>
    <ion-item>
      <ion-label stacked>IC-Number</ion-label>
      <ion-input [(ngModel)] = "regData.icNumber" name = "icNumber" type="number" placeholder = "Your IC-Number"></ion-input>
    </ion-item>
    <ion-item>
      <ion-label stacked>E-mail</ion-label>
      <ion-input [(ngModel)] = "regData.email" name = "email" type="email" placeholder = "Your E-Mail"></ion-input>
    </ion-item>
    <ion-item>
      <ion-label stacked>Password</ion-label>
      <ion-input [(ngModel)] = "regData.password" name = "password" type="password" placeholder = "Your Password"></ion-input>
    </ion-item>
    <ion-item>
      <ion-label stacked>Handphone Number</ion-label>
      <ion-input [(ngModel)] = "regData.phone" name = "phone" type="tel" placeholder = "Your Phone Number"></ion-input>
    </ion-item>
    <ion-item>
      <ion-label stacked>Address</ion-label>
      <ion-input [(ngModel)] = "regData.address" name = "address" type="text" placeholder = "Your Address"></ion-input>
    </ion-item>
    <ion-item>
      <ion-label stacked>City/State</ion-label>
      <ion-input [(ngModel)] = "regData.cityState" name = "cityState" type="text" placeholder = "Your City/State"></ion-input>
    </ion-item>
    <ion-item>
      <ion-label stacked>House Type</ion-label>
      <ion-input [(ngModel)] = "regData.houseType" name = "houseType" type="text" placeholder = "Your House Type"></ion-input>
    </ion-item>
    <ion-item>
      <ion-label stacked>Category</ion-label>
      <ion-select [(ngModel)] = "regData.category" name = "category" type="text" placeholder = "Your Category">
        <ion-select-option value="1" selected>Maid</ion-select-option>
        <ion-select-option value="2" selected>Customer</ion-select-option>
      </ion-select>
    </ion-item>
    <button ion-button block type = "submit">
      SignUp
    </button>
  </form>
</ion-content>

1 个答案:

答案 0 :(得分:0)

这似乎是一个CORS问题,为避免CORS问题,您必须使用@ ionic-native / HTTP插件,该插件实际上是用于API调用的高级HTTP插件。

请按照以下步骤使用此插件

第1步:添加Http本机插件

$ ionic cordova plugin add cordova-plugin-advanced-http
$ npm install --save @ionic-native/http
Installation Link : HTTP

第2步:在您要调用API的文件中导入HTTP本机插件。

import { HTTP, HTTPResponse } from '@ionic-native/http';
Step 3: How to use this plugin for API call ?

constructor(public httpPlugin: HTTP) {

  }

//Set header like this
this.httpPlugin.setHeader("content-type", "application/json");

//Call API 
this.httpPlugin.get(this.url, {}, {}).then((response) => {
    //Got your server response
}).catch(error => {
    //Got error 
});