web-dev-qa-db-ja.com

SyntaxError:Object.parse(native)(AngularJS)の位置0にあるJSONの予期しないトークン<

Phpスクリプト(save-data.php)を使用してデータをjsonファイルに正常に保存していますが、get-data.phpスクリプトを使用してデータを正しくフェッチできません。

エラーメッセージ: angle.js:12520 SyntaxError:予期しないトークン<JSONのObject.parse(ネイティブ)の位置0にあります

save-data.php

<?php

$json = file_get_contents("php://input");

$file = fopen('C:/test/save-data.json','w+');

fwrite($file, $json);

fclose($file);

?>

get-data.php

<?php

//header('Content-Type: application/json');

$json = file_get_contents('C:/test/save-data.json');

//Decode JSON
//$json_data = json_decode($json, true);

//Print data
echo $json

?>

save-data.json

{
  "id": "179",
  "var1": "variable1",
  "var2": "variable2"
}

サンプルコントローラー

// save data (myModel: id, var1, var2)
  $scope.save = function() {
    console.log('Creating a JSON');
    $scope.jsonString = angular.toJson($scope.myModel, true);
    $http.post('save-data.php', $scope.jsonString).then(function(data) {
      $scope.msg1 = 'Data saved';
    });
    $scope.msg2 = 'Data sent: '+ $scope.jsonString;
  };

// get data
  $scope.get = function() {
    $http.get('get-data.php').then(function(data) {
      //$scope.my_data = JSON.parse(data);
      console.log(data.data);
    });
  };

編集:jsonファイルをjsonにデコードしたり、解析したりする必要はありませんでした(すべてスクリプトでコメントされています)。

6
Ariana

常に、99.9999999%の確率でUnexpected token < in JSON as position 0エラーで、サーバーからjsonを受信しませんでした。その後、jsonでHTMLエラーメッセージを受け取りました。

<p>PHP warning: blah blah blah</p>
{"foo":"bar"}

主要な< の中に <p>...は、位置0(最初の文字)であるため、エラーの原因です。

サーバーから返される生データを確認し、PHPが吐き出しているエラー/警告を修正します。

11
Marc B

PHPファイルを確認してください。不要なエコーが存在するため、json応答が正確な応答を取得できませんでした。この方法で問題を解決します。これがお役に立てば幸いです。