Question de AngularJS noob.
J'essaie d'utiliser un service Web asmx pour afficher la grille. J'ai testé le service Web et il a correctement généré les données JSON. Voici mon contrôleur
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);
});
}]);
Pour une raison quelconque, SO ne m’autorise pas à coller le code HTML, mais il contient essentiellement une directive ng-controller et ng-repeat pour parcourir en boucle les données JSON.
Lorsque je lance cette application Web, j'obtiens l'erreur
SyntaxError: Jeton inattendu o sur Object.parse (native) et pointe vers la ligne suivante
$scope.questions = JSON.parse(myjson);
J'ai essayé de vérifier la valeur de myjson en utilisant alert et il affiche [objet Object], [objet Object], ...
Y a-t-il quelque chose qui me manque ici
Je pense que les données renvoyées sont déjà en JSON, pas besoin de JSON.parse()
, à moins que ce ne soit au format chaîne.
$scope.products= data;
Pourquoi utilisez-vous JSON.parse
en deux fois?
var myjson = JSON.parse(data);
$scope.products = JSON.parse(myjson);
Vous avez déjà analysé l'objet de données. Pourquoi alors analyser une autre fois?
aussi, je pense que vos données retournent le résultat Json, vous n'avez donc pas besoin d'analyser l'objet
juste utiliser ceci
$scope.products = data;
Votre variable myjson
est déjà un objet JavaScript valide. Vous n'êtes pas obligé d'utiliser JSON.parse dessus.
Solution simple, utilisez simplement une URL absolue:
var url = 'http://demo/app/pricefilessetup/grid.asmx/getGridJson';
À la place d'utiliser var url = 'app/pricefilessetup/grid.asmx/getGridJson';
J'ai vérifié.
Dans mon cas, le littéral de chaîne était passé en paramètre à JSON.parse()
.
Par exemple, JSON.parse('asdf')
génère une erreur Uncaught SyntaxError: Unexpected token a
.
Avec des cas spécifiques, dans Single page angular application, le jeton d'accès était en train d'être transmis à la JSON.parse()
) et le nettoyage des cookies dans le navigateur a résolu le problème pour moi.