2015-04-21 19 views
26

Domanda da AngularJS noob.SyntaxError: token imprevisto o su Object.parse (nativo) AngularJS

Sto cercando di utilizzare un servizio Web asmx per visualizzare la griglia. Ho testato il servizio Web e restituisce correttamente i dati JSON. Qui è il mio 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); 
    }); 
}]); 

Per qualche ragione, quindi non è che mi permette di incollare il codice HTML, ma ha fondamentalmente una direttiva ng-controller e ng-repeat per scorrere i dati JSON.

Quando eseguo questa web app, ottengo l'errore

SyntaxError: token imprevisto o a Object.parse (nativo) e che punti a riga seguente

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

ho provato il controllo del valore di myjson usando alert e visualizza [oggetto Object], [oggetto Object], ...

C'è qualcosa che mi manca qui

+1

Dubito che sia necessario utilizzare mai 'JSON.parse'. Angular si aspetta che la risposta sia JSON di default e la deserializza per te. – Phil

+3

Inoltre, 'alert' è un terribile strumento di debug. Utilizzare 'console.log' invece (o il servizio Angular [' $ log'] (https://docs.angularjs.org/api/ng/service/$log)) – Phil

risposta

27

Penso che i dati restituiti siano già in JSON, non c'è bisogno di JSON.parse(), a meno che non sia in formato stringa.

$scope.products= data; 
6

La variabile myjson è già un oggetto JavaScript valido. Non devi usare JSON.parse su di esso.

6

Perché si utilizza JSON.parse in due volte?

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

Avete già analizzato l'oggetto dati, quindi perché si analizza un'altra volta?

anche Penso che i dati sono al ritorno risultato JSON, quindi non c'è bisogno di pars l'oggetto

basta usare questo

$scope.products = data; 
0

Soluzione semplice, basta usare un URL assoluto:

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

Invece di utilizzare var url = 'app/pricefilessetup/grid.asmx/getGridJson'; Ho controllato.

0

Nel mio caso è stata passata la stringa letterale come parametro a JSON.parse().

Per esempio JSON.parse('asdf') genera un errore Uncaught SyntaxError: Unexpected token a.

Nel caso specifico, in Applicazione angolare di pagina singola, il token di accesso veniva passato allo JSON.parse() e la cancellazione dei cookie nel browser risolveva il problema per me.

Problemi correlati