31

Question from AngularJS noob.

I am trying to use an asmx web service to display grid. I tested the web service and it correctly outputs the JSON data. Here is my controller

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);
    });
}]);

For some reason, SO is not allowing me to paste the html but it basically has a ng-controller directive and ng-repeat to loop through the JSON data.

When I run this web app, I get the error

SyntaxError: Unexpected token o at Object.parse (native) and it points to following line

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

I tried checking the value of myjson using alert and it displays [object Object], [object Object], ...

Is there anything I am missing here

Pankaj Parkar
  • 134,766
  • 23
  • 234
  • 299
blue piranha
  • 3,706
  • 13
  • 57
  • 98
  • 1
    I doubt you need to ever use `JSON.parse`. Angular expects the response to be JSON by default and deserialises it for you. – Phil Apr 21 '15 at 05:23
  • 3
    Also, `alert` is a terrible debugging tool. Use `console.log` instead (or Angular's [`$log`](https://docs.angularjs.org/api/ng/service/$log) service) – Phil Apr 21 '15 at 05:26

5 Answers5

29

I think data returned is already in JSON, no need of JSON.parse(), unless it in string format.

$scope.products= data;
Pankaj Parkar
  • 134,766
  • 23
  • 234
  • 299
8

Why you using JSON.parse in two times?

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

You have already parse the data object,So then why you parsing another one time?

also i think your data is return Json result, so you don't need to parse the object

just use this

$scope.products = data;
Ramesh Rajendran
  • 37,412
  • 45
  • 153
  • 234
7

Your variable myjson is already a valid JavaScript Object. You do not have to use JSON.parse on it.

fatCop
  • 2,556
  • 10
  • 35
  • 57
0

Simple solution, just use an absolute url:

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

Instead of using var url = 'app/pricefilessetup/grid.asmx/getGridJson'; I have checked.

JanS
  • 2,065
  • 3
  • 27
  • 29
0

In my case it was string literal being passed in as parameter to JSON.parse().

For Example JSON.parse('asdf') would throw an error Uncaught SyntaxError: Unexpected token a.

With specific case, in Single page angular application, the access token was being passed to the JSON.parse() and clearing the cookies in browser solved the problem for me.

vinesh
  • 4,745
  • 6
  • 41
  • 45