Php 意外标记<;在JSON中的位置0-在Angular2应用程序中

Php 意外标记<;在JSON中的位置0-在Angular2应用程序中,php,json,angular,angular2-services,Php,Json,Angular,Angular2 Services,我正在用php后端编写Angular2应用程序。当我从angular应用程序向服务器发出请求时,它会在浏览器控制台中向我发送此错误消息 Unexpected token < in JSON at position 0 问题与登录方法有关 这是相应的php文件user.php <?php $data = json_decode(file_get_contents("php://input")); header("Access-Control-Allow-Origin: *");

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

Unexpected token < in JSON at position 0
问题与
登录
方法有关

这是相应的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();
?>

您之所以看到此错误,是因为您试图将文件当作JSON进行解析,而不是:

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


在运行
res.json
之前,请尝试记录您的响应,您将看到这是一个以
开头的非json文件。您看到此错误是因为您试图将文件解析为json,而不是:

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

在运行
res.json
之前尝试记录您的响应,您将看到它是一个以
开头的非json文件,您可以尝试以下操作:

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

  • json()-始终返回json
  • json-始终返回文本(可能是HTML、PHP、XHTML等)

    this.http.post(“”, {'username':用户名,'password':密码}) .map(res=>res.json)//参见此处 .订阅( 用户=>{ curUser=users[0]; console.log(curUser); } );

  • 您可以尝试以下方法:

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

  • json()-始终返回json
  • json-始终返回文本(可能是HTML、PHP、XHTML等)

    this.http.post(“”, {'username':用户名,'password':密码}) .map(res=>res.json)//参见此处 .订阅( 用户=>{ curUser=users[0]; console.log(curUser); } );


  • angular需要JSON响应,但在某些情况下,PHP不会返回JSON,例如,
    echo“0结果”
    除了前面的注释,您从服务器得到的响应听起来像是HTML,可能是404页面或其他页面。您应该能够打开开发人员工具,并在“网络”选项卡中查看服务器的响应。如果该响应不是纯JSON,它将无法工作。如何在不解析的情况下查看来自服务器的原始数据?网络选项卡仅显示响应和请求的标题@Jason SpradlinCheck your network选项卡,单击请求,然后在“Response”选项卡中查看您收到的内容,顺便说一下,您正在回显两个响应。。。所以至少这是错误的。您的angular需要一个JSON响应,但在某些情况下,您的PHP不会返回JSON,例如,
    echo“0结果”
    除了前面的注释,您从服务器得到的响应听起来像是HTML,可能是404页面或其他页面。您应该能够打开开发人员工具,并在“网络”选项卡中查看服务器的响应。如果该响应不是纯JSON,它将无法工作。如何在不解析的情况下查看来自服务器的原始数据?网络选项卡仅显示响应和请求的标题@Jason SpradlinCheck your network选项卡,单击请求,然后在“Response”选项卡中查看您收到的内容,顺便说一下,您正在回显两个响应。。。所以,至少这是错误的。如何做到这一点?有没有办法看到原始数据随响应而来?
    .map(res=>console.log(res))
    很抱歉,但它不起作用。控制台输出不打印任何内容。我不明白这段代码中的错误是什么。但是当我给出这个
    console.log(this.http.post()http://localhost/back_End/controllers/user.php/“,{'username':用户名,'password':密码}”)
    console.log(this.http.post('http://localhost/back_End/controllers/user.php/“,{'username':用户名,'password':password}.map(res=>console.log(res))。它打印了一个叫做可观察的物体。你忘了“端口”了吗,例如()?所有这些.http.post都是可观察的。如果URL错误,您将收到一个状态代码404-或一个页面-尝试使用导航器中的开发人员工具发送一篇带有URL的帖子,例如,尝试将其放入以帮助调试:this.http.post('http://localhost/back_End/controllers/user.php/“,{'username':用户名,'password':密码})。订阅({next:x=>console.log('get value'+x),error:err=>console.error('发生了错误:'+err),complete:()=>console.log('done'),});
    如何做到这一点?有没有办法看到响应附带的原始数据?
    .map(res=>console.log(res))
    很抱歉。但它不起作用。控制台输出没有打印任何内容。我不明白这段代码中的错误是什么。但是当我给出这段
    console.log(this.http.post)时http://localhost/back_End/controllers/user.php/“,{'username':用户名,'password':password}”);
    console.log(this.http.post('http://localhost/back_End/controllers/user.php/“,{'username':username,'password':password}).map(res=>console.log(res));
    。它打印一些名为observable的对象。您是否忘记了“端口”,例如()?所有this.http.post都是可观察的。如果URL错误,您将收到一个状态代码404-或一个页面-尝试使用导航器中的开发人员工具发送一篇带有URL的帖子,例如,尝试将其放入以帮助调试:this.http.post('http://localhost/back_End/controllers/user.php/“,{'username':用户名,'password':密码}).subscribe({next:x=>console.log('got value'+x),error:err=>console.error('发生了错误:'+err),complete:()=>console.log('done'),});
    <?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();
    ?>