AngularJS 获取方法无效
AngularJS Get Method Not Work
我有一个 angular 应用程序,我正在尝试从服务器获取用户列表。我运行陷入了一个问题。我有页面调用 CurrentUsers。如果 CurrentUsers 方法 return 是一个 Json 对象,则无论我在应用程序控制器和 html 页面中做什么,整个对象都会显示在页面上。如果方法 return 一个视图,它不显示任何东西。但是,我可以在控制器中对 json 对象进行硬编码,它会正常工作。
因此,我为 return json 对象创建了另一个方法。我调用了该方法,但它从未到达服务器。非常感谢您的帮助。
CurrentUsers 方法 returning 一个 JSON 对象,整个 json 对象显示在屏幕上
[HttpGet]
public JsonResult CurrentUsers()
{
List<Users> currentUser = new List<Users>()
{
new Users{ UserName = "JDoe", Professor="SSmith", Course = "English1"},
new Users{ UserName = "ADan", Professor="SDhor", Course = "Science"},
new Users{ UserName = "ADes", Professor="SCarry", Course = "Religion101"},
new Users{ UserName = "DJay", Professor="SCrowe", Course = "Teaching101"},
new Users{ UserName = "MAnne", Professor="TRow", Course = "PreCalc"},
};
return Json(new { Ok = true, data= currentUser });
// return View();
}
如果上面的方法return一个View,我可以修改controller为
如下所示,我会看到相应的信息
Registration.controller('CurrentUsersController', function ($scope, $http) {
$scope.currentUsers = [{ "Professor": "SSmith", "UserName": "JDoe", "Course": "English1" }, { "Professor": "SDhor", "UserName": "ADan", "Course": "Science" }, { "Professor": "SCarry", "UserName": "ADes", "Course": "Religion101" }]
});
我修改了控制器以使用服务并创建了下面的方法来读取当前用户,以便视图可以简单地 return 一个 View()。但是,我无法让“GET”工作。
[HttpGet]
public JsonResult GetUsers()
{
List<Users> currentUser = new List<Users>()
{
new Users{ UserName = "JDoe", Professor="SSmith", Course = "English1"},
new Users{ UserName = "ADan", Professor="SDhor", Course = "Science"},
new Users{ UserName = "ADes", Professor="SCarry", Course = "Religion101"},
new Users{ UserName = "DJay", Professor="SCrowe", Course = "Teaching101"},
new Users{ UserName = "MAnne", Professor="TRow", Course = "PreCalc"},
};
return Json(new { Ok = true, data = currentUser , message =
"Success"}, JsonRequestBehavior.AllowGet);
}
将 CurrentUsers 方法修改为 return 视图
public ActionResult CurrentUsers()
{
return View();
}
我修改控制器
Registration.controller('CurrentUsersController', function ($scope, GetUSerService) {
$scope.message = 'this is the Current User controller';
$scope.currentUsers = [];
var result = GetUSerService.getData()
.then(function (result) {
console.log('the result');
console.log(result.data);
});
});
我的服务
Registration.service('GetUSerService', function ($http,$q) {
this.getData = function () {
var deferredObject = $q.defer();
$http.get('/Home/GetUsers').
success(function (data) {
console.log('service call data');
console.log(data);
deferredObject.resolve({ success: true, data : data.data });
}).
error(function () {
deferredObject.resolve({ success: false, data : '' });
});
return deferredObject.promise;
};
});
更新于 10/6 @5:50
@FernandoPinheiro 的回答对我有用。唯一的问题是 GetUsers 操作被调用了两次。
10 月 7 日更新
我明白了为什么 post 被执行了两次。在我的模板上,我有 ng-app="Registration",我有 ng-controller="CurrentUsersController"。因为我在路由提供者中指定了控制器名称,所以我不需要它来将它添加到局部视图中。一旦我将它从视图中删除,它就会按预期工作。
您的 GetUserService 正在调用 $http.post('/Home/GetUsers')
而不是 $http.get('/Home/GetUsers')
。
此外,您是否应该为操作设置 Route 属性?
我有一个 angular 应用程序,我正在尝试从服务器获取用户列表。我运行陷入了一个问题。我有页面调用 CurrentUsers。如果 CurrentUsers 方法 return 是一个 Json 对象,则无论我在应用程序控制器和 html 页面中做什么,整个对象都会显示在页面上。如果方法 return 一个视图,它不显示任何东西。但是,我可以在控制器中对 json 对象进行硬编码,它会正常工作。 因此,我为 return json 对象创建了另一个方法。我调用了该方法,但它从未到达服务器。非常感谢您的帮助。
CurrentUsers 方法 returning 一个 JSON 对象,整个 json 对象显示在屏幕上
[HttpGet]
public JsonResult CurrentUsers()
{
List<Users> currentUser = new List<Users>()
{
new Users{ UserName = "JDoe", Professor="SSmith", Course = "English1"},
new Users{ UserName = "ADan", Professor="SDhor", Course = "Science"},
new Users{ UserName = "ADes", Professor="SCarry", Course = "Religion101"},
new Users{ UserName = "DJay", Professor="SCrowe", Course = "Teaching101"},
new Users{ UserName = "MAnne", Professor="TRow", Course = "PreCalc"},
};
return Json(new { Ok = true, data= currentUser });
// return View();
}
如果上面的方法return一个View,我可以修改controller为 如下所示,我会看到相应的信息
Registration.controller('CurrentUsersController', function ($scope, $http) {
$scope.currentUsers = [{ "Professor": "SSmith", "UserName": "JDoe", "Course": "English1" }, { "Professor": "SDhor", "UserName": "ADan", "Course": "Science" }, { "Professor": "SCarry", "UserName": "ADes", "Course": "Religion101" }]
});
我修改了控制器以使用服务并创建了下面的方法来读取当前用户,以便视图可以简单地 return 一个 View()。但是,我无法让“GET”工作。
[HttpGet]
public JsonResult GetUsers()
{
List<Users> currentUser = new List<Users>()
{
new Users{ UserName = "JDoe", Professor="SSmith", Course = "English1"},
new Users{ UserName = "ADan", Professor="SDhor", Course = "Science"},
new Users{ UserName = "ADes", Professor="SCarry", Course = "Religion101"},
new Users{ UserName = "DJay", Professor="SCrowe", Course = "Teaching101"},
new Users{ UserName = "MAnne", Professor="TRow", Course = "PreCalc"},
};
return Json(new { Ok = true, data = currentUser , message =
"Success"}, JsonRequestBehavior.AllowGet);
}
将 CurrentUsers 方法修改为 return 视图
public ActionResult CurrentUsers()
{
return View();
}
我修改控制器
Registration.controller('CurrentUsersController', function ($scope, GetUSerService) {
$scope.message = 'this is the Current User controller';
$scope.currentUsers = [];
var result = GetUSerService.getData()
.then(function (result) {
console.log('the result');
console.log(result.data);
});
});
我的服务
Registration.service('GetUSerService', function ($http,$q) {
this.getData = function () {
var deferredObject = $q.defer();
$http.get('/Home/GetUsers').
success(function (data) {
console.log('service call data');
console.log(data);
deferredObject.resolve({ success: true, data : data.data });
}).
error(function () {
deferredObject.resolve({ success: false, data : '' });
});
return deferredObject.promise;
};
});
更新于 10/6 @5:50 @FernandoPinheiro 的回答对我有用。唯一的问题是 GetUsers 操作被调用了两次。
10 月 7 日更新
我明白了为什么 post 被执行了两次。在我的模板上,我有 ng-app="Registration",我有 ng-controller="CurrentUsersController"。因为我在路由提供者中指定了控制器名称,所以我不需要它来将它添加到局部视图中。一旦我将它从视图中删除,它就会按预期工作。
您的 GetUserService 正在调用 $http.post('/Home/GetUsers')
而不是 $http.get('/Home/GetUsers')
。
此外,您是否应该为操作设置 Route 属性?