SyntaxError: Unexpected token o at Object.parse (native) AngularJS

SyntaxError: Unexpected token o at Object.parse (native) AngularJS

来自 AngularJS 菜鸟的问题。

我正在尝试使用 asmx 网络服务来显示网格。我测试了网络服务,它正确地输出了 JSON 数据。 这是我的控制器

app.controller('SetupController', ['$scope', '$http', function ($scope, $http) {

    var url = 'app/pricefilessetup/grid.asmx/getGridJson';

    $http.get(url).success(function (data) {
        var myjson = JSON.parse(data);
        $scope.products= JSON.parse(myjson);
    });
}]);

出于某种原因,SO 不允许我粘贴 html 但它基本上有一个 ng-controller 指令和 ng-repeat 循环遍历 JSON 数据。

当我 运行 这个网络应用程序时,我收到错误

语法错误:意外的标记 o 在 Object.parse(本地) 它指向以下行

  $scope.questions = JSON.parse(myjson);

我尝试使用警报检查 myjson 的值,它显示 [object Object]、[object Object]、...

这里有什么我遗漏的吗

您的变量 myjson 已经是一个有效的 JavaScript 对象。您不必在其上使用 JSON.parse。

我认为返回的数据已经在 JSON 中,不需要 JSON.parse(),除非它是字符串格式。

$scope.products= data;

为什么要用两次JSON.parse

 var myjson = JSON.parse(data);
  $scope.products = JSON.parse(myjson);

你已经解析了数据对象,那为什么还要解析一次?

另外我认为你的数据是 return Json 结果,所以你不需要解析对象

就用这个

$scope.products = data;

简单的解决方案,只需使用绝对 url:

var url = 'http://demo/app/pricefilessetup/grid.asmx/getGridJson';

而不是使用 var url = 'app/pricefilessetup/grid.asmx/getGridJson'; 我查过了

在我的例子中,它是作为参数传递给 JSON.parse() 的字符串文字。

例如 JSON.parse('asdf') 会抛出错误 Uncaught SyntaxError: Unexpected token a

在特定情况下,在单页 angular 应用程序中,访问令牌被传递到 JSON.parse() 并且清除浏览器中的 cookie 解决了我的问题。