Php 意外标记<;在JSON中的位置0-在Angular2应用程序中
我正在用php后端编写Angular2应用程序。当我从angular应用程序向服务器发出请求时,它会在浏览器控制台中向我发送此错误消息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: *");
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();
?>