2015-04-21 26 views
26

Pytanie od programu AngularJS noob.Błąd składni: nieoczekiwany token o obiekcie Object.parse (natywny) AngularJS

Próbuję użyć usługi sieciowej ASMX do wyświetlania siatki. Przetestowałem usługę internetową i poprawnie wyprowadziłem dane JSON. Oto mój kontroler

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

Z jakiegoś powodu, więc nie pozwala mi wkleić html ale w zasadzie ma dyrektywę ng-kontroler i NG-powtarzanie pętli danych JSON.

Kiedy uruchomić tę aplikację, pojawia się błąd

SyntaxError: Nieoczekiwany token o, w Object.parse (natywną) i wskazuje na następującą linią

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

próbowałem sprawdzenie wartość myjsona przy użyciu alertu i wyświetla [obiekt Object], [object Object], ...

Czy jest coś czego mi brakuje tutaj

+1

Wątpię, abyś kiedykolwiek używał 'JSON.parse'. Angular oczekuje, że odpowiedź będzie domyślnie JSON i zidentyfikuje ją dla Ciebie. – Phil

+3

Również "alert" to straszne narzędzie do debugowania. Zamiast tego użyj 'console.log' (lub usługi Angular's [' $ log'] (https://docs.angularjs.org/api/ng/service/$log)) – Phil

Odpowiedz

27

Myślę, że dane zwrócone są już w JSON, nie ma potrzeby JSON.parse(), chyba że w formacie ciąg.

$scope.products= data; 
6

Twoja zmienna myjson jest już prawidłowym obiektem JavaScript. Nie musisz używać JSON.parse na tym.

6

Dlaczego używasz JSON.parse w dwóch przypadkach?

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

Już przeanalizowałeś obiekt danych, więc dlaczego analizujesz kolejny raz?

także myślę, że Twoje dane są return wynik JSON, dzięki czemu nie trzeba pars obiektowi

prostu użyć tej

$scope.products = data; 
0

proste rozwiązanie, wystarczy użyć bezwzględny adres URL:

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

Zamiast używać var url = 'app/pricefilessetup/grid.asmx/getGridJson'; Sprawdziłem.

0

W moim przypadku literał łańcuchowy został przekazany jako parametr do JSON.parse().

Na przykład JSON.parse('asdf') zostałby zgłoszony błąd Uncaught SyntaxError: Unexpected token a.

W konkretnym przypadku, w aplikacji kątowej pojedynczej strony, token dostępu został przekazany do JSON.parse(), a wyczyszczenie plików cookie w przeglądarce rozwiązało problem.

Powiązane problemy