使用Angular将Post转换为PHP文件
我正在学习如何使用HttpClient.post更新MySQL数据库。我插入的表是: |id-日志| PHP文件如下所示:使用Angular将Post转换为PHP文件,php,mysql,angular,Php,Mysql,Angular,我正在学习如何使用HttpClient.post更新MySQL数据库。我插入的表是: |id-日志| PHP文件如下所示: <?php header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Headers: X-Requested-With'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); inc
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
include 'db.php';
$postdata=file_get_contents("php://input");
$request = json_decode($postdata);
$message = $request->message;
// Create connection
$conn = new mysqli($server_name, $mysql_username, $mysql_password, $db_name);
$sql = "INSERT INTO shootingchatlog (id, log) VALUES (NULL, '$message')";
if($conn -> query($sql) === TRUE ){
echo "message Uploaded Successfully";
}else{
echo "Error Uploading Image";
}
mysqli_close($conn);
这让我想到这个问题与我在angular中的代码有关
httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
constructor(private http: HttpClient) { }
public uploadService(mess: string): void {
console.log(mess);
this.http.post(this.url, JSON.stringify({"messasge": mess}), this.httpOptions)
.subscribe((res: Response) => {
console.log(res);
},
err => {
console.log("Error occured", err);
});
}
我遇到的最常见错误是:
SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse
SyntaxError:JSON.parse位置0处的JSON中的意外标记<
我真的不确定我做错了什么。这方面似乎没有任何文档。或者如果是的话,它通常太抽象了。任何帮助都将不胜感激 来自
application/x-www-form-urlencoded:键和值编码在键值元组中,元组之间用“&”分隔,键和值之间用“=”分隔。键和值中的非字母数字字符均采用百分比编码:这就是为什么此类型不适合用于二进制数据的原因(请改用多部分/表单数据)
将内容类型从application/x-www-form-urlencoded更改为multipart/form data
还可以查看这个非常有用的线程:查看chrome或firefox中的检查器,并查看服务器的响应。如果您收到“警告:当使用
mysqli
时,您应该使用并将用户数据添加到查询中”,那么它似乎返回的是HTML或XML而不是JSON。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将$\u POST
、$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能是非常有害的。请尝试摆脱用不必要的东西(如==true
)将代码弄乱的习惯。许多函数被设计为返回逻辑上为真或假的值,因此这是多余的。对于httpClient,您不需要使用JSON.stringify或头,这些头表示我最初使用的是应用程序/JSON。但是,我得到了错误。加载请求标头字段失败飞行前响应中的访问控制允许标头不允许内容类型。请使用多部分表单数据。我仍然在HTTP响应中遇到相同的错误。MySQL数据库得到更新。它添加了一个新行,但该值从未插入到日志列中。如果将内容类型更改为application/x-www-form-urlencoded,multipart/form data或完全删除httpOptions,会发生什么情况?
SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse