Входные данные, отправленные с ionic на php, не заполнены с неожиданным токеном & lt; в JSON в позиции 0 ошибка

Я делаю простую регистрацию пользователя от 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)

Я просто пытаюсь найти проблему, но я не могу исправить. Помогите мне найти мою ошибку.

0

Решение

Согласно вашему ответу почтальона, вы должны внести следующие изменения в код

[(ngModel)] = "data[0].userData.name"

внести изменения во все подобные поля и в машинописный файл

data = [{
"userData": {"name":"","phone":"","email":"","password":""}
}];

this.authService.postData(this.data, "filename.php").then((result)
0

Другие решения

Это как-то сработало, когда я загрузил свои файлы и дб онлайн. Спасибо за помощь!

0

По вопросам рекламы [email protected]