Я делаю простую регистрацию пользователя от Ionic до PHP. Мне просто нужна помощь от всех вас, чтобы пролить свет на ошибку, с которой я сталкиваюсь, и помочь мне исправить ее.
Мой ответ PostMan выглядит следующим образом:
[{
"userData": {
"name": "John Doe",
"phone": "1235467890",
"email": "[email protected]",
"password": "7815696eascbf1c96e6894b779456fdfd33sds0e"}
}]
который является действительным ответом json, как проверено на jsonlint.com
Это мой php файл:
<?php
require "dbconnect.php";
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);
}
$data = file_get_contents("php://input");
$objData = json_decode($data);
$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$password = md5($_POST['password']);
$name = mysqli_real_escape_string($con,$name);
$phone = mysqli_real_escape_string($con,$phone);
$email = mysqli_real_escape_string($con,$email);
$password = mysqli_real_escape_string($con,$password);
$sql = "select * from user where u_email like '".$email."';";
$result = mysqli_query($con,$sql);
$response = array();
if(mysqli_num_rows($result)>0)
{
$code = "reg_failed";
$message = "User Exists";
$response = ['code' => $code, 'message' => $message];
echo json_encode($message);
}
else
{
$sql = "insert into user (u_name,u_num,u_email,u_pass)values ('".$name."','".$phone."','".$email."','".$password."');";
$result = mysqli_query($con,$sql);
$code = "reg_success";
$message = "Registration Success";
$response = ['name' => $name, 'phone' => $phone, 'email' => $email, 'password' => $password];
echo '[{"userData": '.json_encode($response).'}]';
}
?>
Это мой файл register.ts
export class RegisterPage {
responseData:any;
userData = {"name":"","phone":"","email":"","password":""}
constructor(public navCtrl: NavController, public navParams: NavParams, public authService:AuthServiceProvider) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad RegisterPage');
}
login(){
this.navCtrl.push(HomePage);
}
signUp(){
this.authService.postData(this.userData, "filename.php").then((result) =>{
this.responseData = result;
console.log(this.responseData);
localStorage.setItem('userData',JSON.stringify(this.responseData));
this.navCtrl.push(LocationpagePage);
}, (err) =>{
console.log("error", this.responseData);
});
}
}
Мой файл register.html
<ion-content padding>
<ion-title>Register</ion-title>
<ion-list>
<ion-item>
<ion-input type = "text" placeholder="Name" [(ngModel)] = "userData.name"></ion-input>
</ion-item>
<ion-item>
<ion-input type = "phone" placeholder="Mobile" [(ngModel)] = "userData.phone"></ion-input>
</ion-item>
<ion-item>
<ion-input type = "email" placeholder="Email" [(ngModel)] = "userData.email"></ion-input>
</ion-item>
<ion-item>
<ion-input type = "password" placeholder="Password" [(ngModel)] = "userData.password"></ion-input>
</ion-item>
</ion-list>
<button ion-button round color="secondary" (click)="signUp()">Register</button>
<p>Already a User?</p> <a href = "#" (click) = "login()">Sign In</a>
</ion-content>
И, наконец, это мой файл аутентификации
let apiUrl = "http://url/foldername/";
/*
Generated class for the AuthServiceProvider provider.
See https://angular.io/guide/dependency-injection for more info on providers
and Angular DI.
*/
@Injectable()
export class AuthServiceProvider {
constructor(public http: Http) {
console.log('Hello AuthServiceProvider Provider');
}
postData(credentials,type){
return new Promise((resolve, reject) => {
let headers = new Headers();
this.http.post(apiUrl+type,JSON.stringify(credentials),{headers: headers})
.subscribe(res =>{
resolve(res.json());
}, (err) =>{
reject(err);
});
});
}
}
Моя консольная ошибка:
core.js:1449 ERROR SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>)
at Response.Body.json (http.js:1091)
at SafeSubscriber._next (auth-service.ts:27)
at SafeSubscriber.__tryOrUnsub (Subscriber.js:242)
at SafeSubscriber.next (Subscriber.js:189)
at Subscriber._next (Subscriber.js:129)
at Subscriber.next (Subscriber.js:93)
at XMLHttpRequest.onLoad (http.js:1591)
at t.invokeTask (polyfills.js:3)
at Object.onInvokeTask (core.js:4751)
Я просто пытаюсь найти проблему, но я не могу исправить. Помогите мне найти мою ошибку.
Согласно вашему ответу почтальона, вы должны внести следующие изменения в код
[(ngModel)] = "data[0].userData.name"
внести изменения во все подобные поля и в машинописный файл
data = [{
"userData": {"name":"","phone":"","email":"","password":""}
}];
this.authService.postData(this.data, "filename.php").then((result)
Это как-то сработало, когда я загрузил свои файлы и дб онлайн. Спасибо за помощь!