Angular 6 и PHP SyntaxError: неожиданный токен & lt; в JSON в позиции 0 в JSON.parse (& lt; анонимно & gt;)

У меня есть следующий класс PHP:

<?php

//header('Access-Control-Allow-Headers: *');
//header('Content-Type: application/json');
//header('Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS');

error_reporting(E_ALL);

class api {
private $username ="root";
private $password ="...";
private $db="...";
private $host = "localhost";

public $conn;

//Connection

public function connection(){
try{
$this->conn = new PDO("mysql:host=$this->host;dbname=$this->db", $this->username, $this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->conn->exec("SET CHARACTER SET utf8");

return $this->conn;
}
catch(PDOException $e){
return $e->getMessage();
}

}

//Login

public function login($conn, $user){
$login = "SELECT username FROM login WHERE username=:user LIMIT 1";
$execLogin = $this->conn->prepare($login);
$execLogin->bindValue(":user", $user);
$execLogin->execute();
$res = $execLogin->rowCount();

return $res;
// if($res>0)
// {
//     return json_encode($res);
// }
// else{
//     echo 0;
// }
}

}

?>

В этом классе у меня есть две основные функции: первая для подключения к серверу, а вторая — для входа в систему.

Затем в веб-приложении Angular, если пользователь добавил свои учетные данные, они будут отправлены в сценарий login.php через HttpClient из Angular 6:

<?php
//header('Access-Control-Allow-Headers: *');
header('Content-Type: application/json');

require_once('../api.php');

//Getting username and password from Angular

$user="brital";
//$pass = json_decode($_POST['credentials']);

$newApi = new api();
$conn = $newApi->connection();
$res = $newApi->login($conn, $user);
echo json_encode($res);
?>

Что касается углового сценария, я создал угловой сервис в виде файла API для управления всеми методами, связанными с подключением к серверу.

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { map } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})

export class AuthApiService {
public credentials:any=[];
constructor(private http: HttpClient) { }


login(username, password)
{
let headerOptions = new HttpHeaders();
headerOptions.append('Access-Control-Allow-Origin', '*');
headerOptions.append('Content-Type', 'application/json');

let test = {"user": username, "pass": password};
this.credentials = JSON.stringify(test),
console.log("hi "+ this.credentials);
return this.http.post('http://dev.local/scripts/login.php', this.credentials, {
headers: headerOptions
}).pipe(map(
res=>{

console.log(res)
},
err=>
console.log(err)
))
}
}

А вот и кнопка HTML:

<a id="btn-login"  (click)="login()" class="btn btn-success">Login </a>

Как видите, я отправляю a а также b в качестве значений тестирования для функций.

У меня была следующая ошибка:

Http сбой при разборе для Http: //dev.local/scripts/login.php

ошибка: SyntaxError: неожиданный токен < в JSON в позиции 0 в
JSON.parse () в XMLHttpRequest.onLoad
(HTTP: // локальный: 4200 / vendor.js: 28274: 51) в
ZoneDelegate.push ../ node_modules / zone.js / расстояние / zone.js.ZoneDelegate.invokeTask
(HTTP: // локальный: 4200 / polyfills.js: 2743: 31) в Object.onInvokeTask
(HTTP: // локальный: 4200 / vendor.js: 56150: 33) в
ZoneDelegate.push ../ node_modules / zone.js / расстояние / zone.js.ZoneDelegate.invokeTask
(HTTP: // локальный: 4200 / polyfills.js: 2742: 36) в
Zone.push ../ node_modules / zone.js / расстояние / zone.js.Zone.runTask
(HTTP: // локальный: 4200 / polyfills.js: 2510: 47) в
ZoneTask.push ../ node_modules / zone.js / расстояние / zone.js.ZoneTask.invokeTask
[как вызвать] (HTTP: // локальный: 4200 / polyfills.js: 2818: 34) в invokeTask
(HTTP: // локальный: 4200 / polyfills.js: 3862: 14) в
XMLHttpRequest.globalZoneAwareCallback
(HTTP: // локальный: 4200 / polyfills.js: 3888: 17) сообщение: «Неожиданно
знак < в JSON в позиции 0 «

И вот скриншот:

введите описание изображения здесь

С вкладки сети у меня была ошибка, возвращенная из login.php:

Примечание: неопределенный индекс: учетные данные в
C: \ wamp64 \ www \ dev \ scripts \ login.php в строке 8

И если вы проверите мой login.php, я уже прокомментировал эту строку, поэтому я не знаю, почему выдает мне такую ​​ошибку.

-1

Решение

Такая же ошибка возникала, когда я пытался отправить одно строковое сообщение (например: res.send( "Message from node" )) от узла к угловому.

Я просто изменил строку в формате JSON, как {"msg" : "Message from node"}Я получал данные после этого.

Я пытался после добавления этого res.setHeader('Content-Type', 'text/plain') это возвращало ту же ошибку в начале.

1

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

Хорошо, я нашел решение:

кажется, что я должен добавить следующие заголовки:

headerOptions.append('Access-Control-Allow-Origin', '*');
headerOptions.append('Access-Control-Request-Headers', '*');
headerOptions.append('Content-Type', 'application/json');
headerOptions.append('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH,OPTIONS');

А из Apache мы должны перейти к службам Apache и проверить headers_modules.

Затем мы должны изменить httpd.conf и следующее:

<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin: *
</IfModule>
0

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