我正在使用Angular 2,我想将json数据发送到php文件。当我尝试使用发布请求发送数据时,它说“ SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符”。当我查看“网络”标签时,它显示状态200,因此它发送了它。我不确定自己在做什么错,但是如果有人可以看一下,我将不胜感激。
这是我用于发布请求的数据服务
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() || {}
);
}
我在这样的组件中使用它。
sendDatatoServer(){
this.dataService.sendData(this.data)
.subscribe(
data => {
console.log('the data', data);
},
(err) => console.log(err),
() => console.log("data success!!")
);
}
字符串化后,我的json数据看起来像这样。
{"data": [{"title": "sometext" }, {"title": "sometext" }]}
这是我到目前为止拥有的test.php文件。我不确定这是否正确,但不会发送任何响应。
<?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});
你真的应该在那儿花括号吗?好吧,重要的是,如果字符串化的JSON看起来像:
{"data": [{"title": "sometext" }, {"title": "sometext" }]}
一切都应该很好。
如评论中所述,您需要在PHP端对数据进行json_encode:
echo json_encode($request);
在评论中,您说过要访问标题,如下所示:
echo json_encode($request->title)
不可能,您指的是什么标题?您的json是一个包含数组的对象,因此要访问例如第一个标题,您必须执行以下操作:
echo json_encode($request->data[0]->title);
除此之外,您的其余代码看起来还不错,所以应该可以使用:)