/ / Pobieranie JSON z .NET Webmethod, do użycia w ng-repeat - .net, json, angularjs, webmethod

Pobieranie JSON z .NET Webmethod, do użycia w ng-repeat - .net, json, angularjs, webmethod

Okej, więc rozejrzałem się po okolicy i uzyskałem pomoc. Nie mniej od tej SO odpowiedzi: https://stackoverflow.com/a/24657665/1223463

Ale tutaj stoję:

Odzyskuję dane z metody internetowej i jestem w stanie wyświetlić je w prosty sposób {{data}} na stronie. Jednak nic nie wyświetla się, gdy próbuję przejrzeć dane (składa się z dwóch obiektów JSON) i odwołuje się do ich kluczy danych.

JavaScript:

angular.module("myApp", [])
.controller("MyController", function ($scope, $http) {

$scope.data = [];
$scope.getData = function (item, event) {
$http.post("NGTest.aspx/GetGroups", { data: {} })
.success(function (data, status, headers, config) {
$scope.data = data.d;
});
};

}).config(function ($httpProvider) {

$httpProvider.defaults.headers.post = {};

$httpProvider.defaults.headers.post["Content-Type"] = "application/json; charset=utf-8";

});

HTML:

<body ng-app="myApp">

<div ng-controller="MyController" >
<button ng-click="getData(item, $event)">Get data</button>
<br/>

{{data}}

<div ng-repeat="d in data">
{{d.ID}} a row
</div>
</div>
</body>

Kod za:

[WebMethod(EnableSession = true)]
public static string GetGroups()
{
return @"[{
"ID": 1568,
"Orgno": "282-1"
}, {
"ID": 1569,
"Orgno": "8925-2"
}]";
}

Po naciśnięciu przycisku dane są wyświetlane jako: [{ "ID": 1568, "Orgno": "282-1" }, { "ID": 1569, "Orgno": "8925-2" }] jasne i proste. Ale część powtórzenia ng nie daje kodu.

Oto skrzypce z pozornie tą samą rzeczą: http://jsfiddle.net/eurythmech/t9jzbm06/

Jedyne, co widzę, różni się między nimi, że w skrzypcach dane JSON są dostarczane bez otaczających je cudzysłowów.

Czy to w jakiś sposób muszę naprawić? Jeśli tak to jak?

Odpowiedzi:

1 dla odpowiedzi № 1

Wygląda na to, że dane są zwracane jako ciąg, a nie jako obiekt. Możesz dodać eval do połączenia $ http:

$scope.getData = function (item, event) {
$http.post("NGTest.aspx/GetGroups", { data: {} })
.success(function (data, status, headers, config) {
$scope.data = eval(data.d);
});
};

Lepszym sposobem byłoby zwrócenie tablicy obiektów w metodzie GetGroups, dzięki czemu ASP.NET serializuje ją dla Ciebie. Więcej informacji tutaj WebMethod zwraca JSON, ale odpowiedź obj w moim wywołaniu zwrotnym $ .ajax () jest tylko ciągiem znaków

Jeszcze jedno, jak powiedziałeś, JSON musi używać podwójnych cudzysłowów dla ciągów (sprawdź http://www.json.org/ )