2017-01-11 9 views
1

Angular 2を使用しています.jsonデータをPHPファイルに送信したいとします。投稿要求を使用してデータを送信しようとすると、「SyntaxError:JSON.parse:JSONデータの第1行第1列の予期しない文字」と表示されます。ネットワークタブを見ると、ステータス200と表示され、送信されます。私は何が間違っているのか分かりませんが、誰かがこれを見ることができたらうれしいです。ここで角2:SyntaxError:JSON.parse:JSONデータの1行目のカラム1の予期しない文字

は、私はPOSTリクエスト私はこのように私のコンポーネントでそれを使用

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; 
+0

'$ request'はオブジェクトですが、' echo $ request; 'は何を表示すると思いますか? – Barmar

+0

@Barmar鍵をエコーし​​ようとしましたが、エラーが発生し続けます。 – LadyT

+0

問題はリクエストではなく、レスポンスです。 res.json()にレスポンスをマップします。レスポンスにhtmlが含まれていると、解析エラーがスローされます。これは、Webサーバーが例外を返すときに簡単に発生します。 – Matt

答えて

2

あなたの問題は完全に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); 

これとは別に、あなたのコードの残りの部分は正常に見えるので、これは動作するはずです: )

+0

ありがとうございます。これは本当に役に立ちます。私はまだエラーが発生しますが、データはデータベースに表示されます。そうだよ。 – LadyT

+0

あなたはどんなエラーを受けていますか?私は実際にこれを試して、うまくいきました。 – Alex

+0

コンソールからのエラーです。その奇妙な。 'SyntaxError:JSON.parse:JSONデータの1行目の1列目に予期しない文字があります.'それはちょうどうまく動作していたので、突然このエラーがスローされます。 – LadyT

関連する問題