Javascript Angular 2:SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符
我使用的是Angular 2,我想将json数据发送到一个php文件。当我尝试使用post请求发送数据时,会显示“SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符”。当我查看网络选项卡时,它显示状态200,所以它发送了它。我不确定我做错了什么,但如果有人能检查一下,我将不胜感激 这是我用于post请求的数据服务Javascript Angular 2:SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符,javascript,php,json,angular,Javascript,Php,Json,Angular,我使用的是Angular 2,我想将json数据发送到一个php文件。当我尝试使用post请求发送数据时,会显示“SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符”。当我查看网络选项卡时,它显示状态200,所以它发送了它。我不确定我做错了什么,但如果有人能检查一下,我将不胜感激 这是我用于post请求的数据服务 sendData(data): Observable<Object>{ let url = "test.php"; let encoded
sendData(data): Observable<Object>{
let url = "test.php";
let encoded_data = JSON.stringify({data});
console.log('encoded', encoded_data);
let headers = new Headers({ 'Content-Type': 'application/json; charset=utf-8' });
let options = new RequestOptions({ headers: headers });
return this.http.post(url, encoded_data).map(
(res: Response) => res.json() || {}
);
}
我的json数据在字符串化时看起来有点像这样。
sendDatatoServer(){
this.dataService.sendData(this.data)
.subscribe(
data => {
console.log('the data', data);
},
(err) => console.log(err),
() => console.log("data success!!")
);
}
{"data": [{"title": "sometext" }, {"title": "sometext" }]}
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
echo $request;
这是到目前为止我所拥有的test.php文件。我不确定这是否正确,但它不会发送任何响应。
sendDatatoServer(){
this.dataService.sendData(this.data)
.subscribe(
data => {
console.log('the data', data);
},
(err) => console.log(err),
() => console.log("data success!!")
);
}
{"data": [{"title": "sometext" }, {"title": "sometext" }]}
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
echo $request;
我认为,您的问题似乎完全在PHP方面。我只是想知道以下几点:
let encoded_data = JSON.stringify({data});
echo json_encode($request->data[0]->title);
你真的应该有那个花括号吗?重要的是,如果字符串化的JSON看起来像:
{"data": [{"title": "sometext" }, {"title": "sometext" }]}
一切都应该很好
如评论中所述,您需要在PHP端对数据进行json_编码:
echo json_encode($request);
在评论中,您说您希望访问标题,如下所示:
echo json_encode($request->title)
不可能,你指的是哪个标题?您的json是一个包含数组的对象,因此要访问例如第一个标题,您必须执行以下操作:
let encoded_data = JSON.stringify({data});
echo json_encode($request->data[0]->title);
除此之外,您的其余代码看起来不错,因此这应该可以工作:)$request
是一个对象,您希望得到什么echo$request代码>要显示?@Barmar我试图回显按键,但不断出现错误。问题不在于请求,而在于响应。将响应映射到res.json(),例如,当响应包含html时,它将抛出解析错误。当您的Web服务器返回异常时,很容易发生这种情况。客户端希望响应为JSON。你不能只回显键,你需要回显一个JSON字符串<代码>回声json_编码($request)我明白你的意思。我添加了json_编码,解析错误消失了。当我尝试访问像echo json\u encode($request->title)
这样的键时,控制台中出现了语法错误。感谢您的解释。这真的很有帮助。我仍然得到错误,但数据确实显示在我的数据库中。这很好。你得到了什么错误,在哪里?我真的试过了,效果很好。我从控制台得到的错误。不过很奇怪SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符
很奇怪,因为它刚刚工作,然后突然抛出了这个错误。我尝试了你的精确代码,它对我有效。首先尝试对对象进行硬编码,看看这是否有效,因此不要使用encoded_data=JSON.stringify({data})代码>执行:JSON.stringify({“data”:[{“title”:“sometext”},{“title”:“sometext”}]})
这样就可以知道是否存在错误。