从 ionic 发送到 php 的输入为空,JSON 中出现意外的令牌<位置 0 错误



我正在对用户从Ionic到PHP进行简单的注册。我只是想从你们所有人那里得到一些帮助,以阐明我面临的错误并帮助我纠正它。

我的邮递员回应如下:

[{
"userData": {
"name": "John Doe",
"phone": "1235467890",
"email": "johndoe@gmail.com",
"password": "7815696eascbf1c96e6894b779456fdfd33sds0e"
}
}]

这是在 jsonlint.com 上检查的有效 JSON 响应

这是我的 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).'}]';
}
?>

这是我的注册.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);
});
}
}

我的注册.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)

当我在线上传文件和数据库时,它以某种方式起作用。感谢您的帮助!

最新更新