意外的令牌<在位置0的JSON中 - 在Angular2应用程序中

时间:2017-11-03 20:47:52

标签: php json angular angular2-services

我正在用php后端编写一个Angular2应用程序。当我从angular应用程序向服务器发出请求时,它会在浏览器控制台中向我发送此错误消息。

Unexpected token < in JSON at position 0

我已经阅读了有关此问题的问题。他们说问题在于http响应的响应类型。他们说,响应类型应为json。但是我的应用程序中的响应类型为text/html

这是与我的问题user.service.ts

相关的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的新手。有人可以给我一个解决方案吗?

2 个答案:

答案 0 :(得分:2)

您正在查看此错误,因为您正在尝试解析文件,就好像它是JSON一样,它不是:

.text-right

尝试在运行.map(res => res.json())之前记录您的响应,并且您将看到它是以res.json字符开头的非JSON文件(例如php,XML,HTML等) )。

答案 1 :(得分:1)

你可以试试这个:

问题在这里,因为你使用json()而不是json

  1. json() - 始终返回json
  2. json - 始终返回文本(可能是HTML,PHP,XHTML等)。

    this.http.post( 'http://localhost/back_End/controllers/user.php/',          {'用户名':用户名,'密码':密码})                   .map(res =&gt; res.json)//见这里                   。订阅(                     users =&gt; {                       curUser = users [0];                       的console.log(curUser);                     }                   );