Неожиданный токен & lt; в JSON в позиции 0 — в приложении Angular2

Я пишу приложение Angular2 с PHP-сервером. Когда я делаю запрос на сервер из углового приложения, он отправляет мне это сообщение об ошибке в консоли браузера.

Unexpected token < in JSON at position 0

Я прочитал вопрос по этой проблеме. Они говорят, что проблема в типе ответа http ответ. Они говорят, что тип ответа должен быть json, Но тип ответа text/html в моем приложении.

Это файл service.ts, связанный с моей проблемой user.service.ts

import { Injectable } from '@angular/core';
import {User} from '../models/user';
import {Http} from '@angular/http';

@Injectable()
export class UserService {

private currentUser: User;

constructor(private http: Http) {
this.currentUser = new User(null, null, null, false);
}

getCurrentUser() {
return this.currentUser;
}

logIn(username, password) {
let curUser = new User(username, password, null, false);

this.http.post('http://localhost/back_End/controllers/user.php/', {'username': username , 'password': password})
.map(res => res.json())
.subscribe(
users => {
curUser = users[0];
console.log(curUser);
}
);
console.log(curUser);
}

Проблема связана с logIn метод.

Это соответствующий файл php user.php

<?php
$data  = json_decode(file_get_contents("php://input"));

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

$server_ame = "localhost";
$username = "root";
$password = "";
$dbname = "yathra";
$conn = new mysqli($servername, $username, $password, $dbname);

$sql = "select * from user where username='$data->username' and password='$data->password'";
$result = $conn->query($sql);
if($result->num_rows > 0) {
$data = array();
while($row = $result->fetch_assoc()) {
$data[] = $row;
}
}else {
echo "0 results";
}
echo json_encode($data);

$conn->close();
?>

Я новичок в Angular2. Может кто-нибудь дать мне решение для этого?

0

Решение

Вы можете попробовать для этого:

Проблема была здесь, потому что вы используете json () вместо json

  1. JSON () — всегда возвращайте JSON
  2. JSON — всегда возвращайте текст (это может быть HTML, PHP, XHTML и т. д.).

    this.http.post (»Http: //localhost/back_End/controllers/user.php/»,
    {‘имя пользователя’: имя пользователя, ‘пароль’: пароль})
    .map (res => res.json) // СМОТРИТЕ ЗДЕСЬ
    .подписываться(
    пользователи => {
    curUser = users [0];
    console.log (curUser);
    }
    );

1

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

Вы видите эту ошибку, потому что вы пытаетесь проанализировать файл, как будто это JSON, а это не так:

.map(res => res.json())

Попробуйте записать свой ответ перед запуском res.json и вы увидите, что это не JSON-файл, который начинается с < символ (например, php, XML, HTML и т. д.).

2