我使用grails 2.3.4
作为angularjs 1.2.8
应用程序的后端。
我想将数据保存到数据库中。我试图像这样实现它:
testApp.controller('testController', function($scope, $rootScope, $http, $location) {
$scope.product = {};
$scope.saveProduct = function() {
console.log('call saveProduct');
$http
.post($rootScope.appUrl + '/product.json', $scope.book)
.success(function(data, status, headers, config) {
$location.path('/product');
}).error(function(data, status, headers, config) {
});
}
});
原则上这应该有效,因为我的后端使用@Resource(uri='/product')
来提供RESTFUL API。我可以调用所有现有产品:http://localhost:8080/testApplication/product.json
然而,Chrome控制台诊断让我:
POST http://localhost:8080/testApplication/undefined/product.json 404 (Not Found)
undefined
使此链接无效。有任何建议如何删除它?
有关如何更改功能以使其工作的任何建议吗?
答案 0 :(得分:1)
当您致电$rootScope.appUrl
时,undefined
似乎$http.post()
。尝试将$rootScope.appUrl
的值记录到控制台以确保。如果是undefined
,请将其设置为您需要匹配后端所需的URL的任何内容。
编辑:我不熟悉Angular的细节或者究竟是什么传递给这个方法,但是你可以通过检查变量是否定义来更加健壮,如下所示:
$scope.saveProduct = function() {
var url = 'products.json';
if($rootScope && $rootScope.appUrl) {
url = $rootScope.appUrl + '/' + url;
}
console.log('call saveProduct');
$http
.post(url, $scope.book)
.success(function(data, status, headers, config) {
$location.path('/product');
})
.error(function(data, status, headers, config) {});
}