语法错误:在对象解析中JSON位置0处的意外符号<。 (AngularJS)

7

我成功地用一个php脚本(save-data.php)把我的数据保存到了json文件里,但是我无法通过我的get-data.php脚本正确地获取它。

错误信息:angular.js:12520 SyntaxError: Unexpected token < in JSON at position 0 at Object.parse (native)

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格式,也不需要解析它(所有脚本中都有注释)。


如果你在浏览器中访问get-data.php会发生什么?我可以百分之百保证,你的php代码不会被执行,并且它会原样返回文件。 - E_p
2
为什么你在 get-data.php 中调用 json_decode()?这会将你的 JSON 对象转换成数组,所以显然 Angular 在此之后无法解析它(JSON.parse() 期望的是 JSON 对象)。直接传递它而不进行转换即可。 - mitkosoft
angular.js:12520 语法错误:在JSON的第1个位置意外的o符号,位于Object.parse(native)。 - Ariana
看起来你的端点没有返回 JSON。 - Kevin B
2个回答

12

通常情况下,99.9999999%的时间,当你在错误中得到Unexpected token < in JSON as position 0这句话时,你没有从服务器收到json。相反,你得到了一个HTML错误消息,其中包含随后的json。

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

错误是由于段落标签中的第一个字符<,即位置0引起的。

检查从服务器返回的原始数据,并修复PHP发出的任何错误/警告。


我不需要将json文件解码为json,也不需要解析它。 - Ariana

2
请检查您的PHP文件。可能存在不必要的echo,因此无法获得准确的JSON响应。 我通过以下方式解决了我的问题。 希望这对您有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接