从 .NET Webmethod 获取 JSON,用于 ng-repeat
Getting JSON From .NET Webmethod, for use in ng-repeat
好的,所以我到处搜索并获得了一些帮助。至少来自这个 SO 答案:
但这就是我的立场:
我从 Webmethod 取回数据,并且能够在页面上用简单的 {{data}}
显示它。但是,当我尝试遍历数据(它由两个 JSON 对象组成)并引用它们的数据键时,没有任何显示。
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>
后面的代码:
[WebMethod(EnableSession = true)]
public static string GetGroups()
{
return @"[{
'ID': 1568,
'Orgno': '282-1'
}, {
'ID': 1569,
'Orgno': '8925-2'
}]";
}
因此,当我按下按钮时,我得到的数据显示为:[{ 'ID': 1568, 'Orgno': '282-1' }, { 'ID': 1569, 'Orgno': '8925-2' }]
简单明了。但是 ng-repeat 部分没有产生任何代码。
这是一个 fiddle 看似相同的东西:http://jsfiddle.net/eurythmech/t9jzbm06/
我能看到的一件事是它们之间的不同之处在于,在 fiddle 中,提供的 JSON 数据没有引号。
这是我需要解决的问题吗?如果是,怎么做?
您的数据似乎是 return 作为字符串而非对象编辑的。您可以在 $http 调用中添加一个 eval :
$scope.getData = function (item, event) {
$http.post('NGTest.aspx/GetGroups', { data: {} })
.success(function (data, status, headers, config) {
$scope.data = eval(data.d);
});
};
更好的方法是在您的 GetGroups 方法中 return 一个对象数组,这样 ASP.NET 将为您序列化它。更多信息就在那里 WebMethod returning JSON but the response obj in my $.ajax() callback is only a string
还有一件事,如您所说,JSON 必须对字符串使用双引号(检查 http://www.json.org/ )
好的,所以我到处搜索并获得了一些帮助。至少来自这个 SO 答案:
但这就是我的立场:
我从 Webmethod 取回数据,并且能够在页面上用简单的 {{data}}
显示它。但是,当我尝试遍历数据(它由两个 JSON 对象组成)并引用它们的数据键时,没有任何显示。
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>
后面的代码:
[WebMethod(EnableSession = true)]
public static string GetGroups()
{
return @"[{
'ID': 1568,
'Orgno': '282-1'
}, {
'ID': 1569,
'Orgno': '8925-2'
}]";
}
因此,当我按下按钮时,我得到的数据显示为:[{ 'ID': 1568, 'Orgno': '282-1' }, { 'ID': 1569, 'Orgno': '8925-2' }]
简单明了。但是 ng-repeat 部分没有产生任何代码。
这是一个 fiddle 看似相同的东西:http://jsfiddle.net/eurythmech/t9jzbm06/
我能看到的一件事是它们之间的不同之处在于,在 fiddle 中,提供的 JSON 数据没有引号。
这是我需要解决的问题吗?如果是,怎么做?
您的数据似乎是 return 作为字符串而非对象编辑的。您可以在 $http 调用中添加一个 eval :
$scope.getData = function (item, event) {
$http.post('NGTest.aspx/GetGroups', { data: {} })
.success(function (data, status, headers, config) {
$scope.data = eval(data.d);
});
};
更好的方法是在您的 GetGroups 方法中 return 一个对象数组,这样 ASP.NET 将为您序列化它。更多信息就在那里 WebMethod returning JSON but the response obj in my $.ajax() callback is only a string
还有一件事,如您所说,JSON 必须对字符串使用双引号(检查 http://www.json.org/ )