Angular 2:SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符

时间:2017-01-11 23:24:58

标签: javascript php json angular

我正在使用Angular 2,我想将json数据发送到php文件。当我尝试使用post请求发送数据时,它会显示“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;

1 个答案:

答案 0 :(得分:3)

我认为你的问题似乎完全在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);

除此之外,其余的代码看起来很好,所以这应该有效:)