Я новичок в Ionic 3, я хочу представить данные об имени пользователя в MySQL. Я использую следующий код, он не показывает никаких сообщений об ошибках, но он не показывает значение, переданное в файл api.php. Как мы можем использовать команду Вставить в следующем файле api.php.
contact.html
<ion-header>
<ion-navbar>
<button ion-button menuToggle>
<ion-icon name="menu"></ion-icon>
</button>
<ion-title>My Contact</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-item>
<ion-label floating>Username</ion-label>
<ion-input type="text" name="username" [(ngModel)]="data.username"></ion-input>
</ion-item>
<button ion-button color="danger" round (click)="submit()">Submit</button>
<button ion-button color="primary" menuToggle>Toggle Menu</button>
</ion-list>
</ion-content>
contact.ts
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Http } from '@angular/http';
/**
* Generated class for the ContactPage page.
*
* See http://ionicframework.com/docs/components/#navigation for more info
* on Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-contact',
templateUrl: 'contact.html',
})
export class ContactPage {
data:any = {};
constructor(public navCtrl: NavController, public navParams: NavParams, public http: Http) {
this.data.username = '';
this.data.response = '';
this.http=http;
}
submit() {
var link = '../contact/api.php';
var myData = JSON.stringify({username: this.data.username});
this.http.post(link, myData)
.subscribe(data => {
this.data.response = data["_body"];
}, error => {
console.log("Oooops!");
});
}
ionViewDidLoad() {
console.log('ionViewDidLoad ContactPage');
}
}
api.php
<?php
// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
echo "You have CORS!";
$postdata = file_get_contents("php://input");
if (isset($postdata)) {
$request = json_decode($postdata);
$username = $request->username;
echo "hello how are you"if ($username != "") {
echo "Server returns: " . $username;
}
else {
echo "Empty username parameter!";
}
}
else {
echo "Not called properly with username parameter!";
}
?>
Пожалуйста, помогите решить проблему
Во-первых, вы сделали post()
неправильно. Во-вторых, вы сделали это против провайдера на основе arctecture.Which очень плохой.
Я настоятельно рекомендую увидеть ссылки ниже для изучения архитектуры на основе провайдера.
Углубленное объяснение поставщиков
Как, почему и когда использовать провайдеров
Ваш post()
метод должен быть таким:
myProvider.ts
post(url: string, body: string): Observable<any> {
let headers = new Headers();
headers.append('content-type', 'application/json');
let options = new RequestOptions({ headers: headers });
return this.http.post(url, body, options)
.map(this.extractData)
.catch(this.handleError);
}//to extract data
private extractData(res: Response) {
let body = res.json();
return body || {};
}
//to handle error
private handleError(error: Response | any) {
let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
const err = body.error || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
Других решений пока нет …