Javascript Angularjs:使用“引用”;。然后";并得到回应
我想发送一个http请求并获取此请求的响应。我希望如果数据被保存,我得到数据库信息,如果不保存,我得到错误。为此,我想在angularjs中使用Javascript Angularjs:使用“引用”;。然后";并得到回应,javascript,ruby-on-rails,angularjs,http,Javascript,Ruby On Rails,Angularjs,Http,我想发送一个http请求并获取此请求的响应。我希望如果数据被保存,我得到数据库信息,如果不保存,我得到错误。为此,我想在angularjs中使用。然后使用。为此,我创建了angularjs控制器和服务。我在angularjs部分有以下代码: bolouk.js: 'use strict'; var app = angular.module('app'); app.controller('BoloukCtrl', ['$scope', 'Bolouks', function($scope, Bol
。然后使用。为此,我创建了angularjs控制器和服务。我在angularjs部分有以下代码:
bolouk.js
:
'use strict';
var app = angular.module('app');
app.controller('BoloukCtrl', ['$scope', 'Bolouks', function($scope, Bolouks){
$scope.save = function(){
Bolouks.create($scope.bolouk).then(function(data){
$scope.saveBolouk = data;
},function(err){
$scope.err = err;
}
);
};
}]);
'use strict';
var app = angular.module('boloukService', ['ngResource']);
app.factory('Bolouks', function($resource) {
return $resource('/api/bolouks.json', {}, {
create: { method: 'POST', isArray: false }
});
});
boloukService.js
:
'use strict';
var app = angular.module('app');
app.controller('BoloukCtrl', ['$scope', 'Bolouks', function($scope, Bolouks){
$scope.save = function(){
Bolouks.create($scope.bolouk).then(function(data){
$scope.saveBolouk = data;
},function(err){
$scope.err = err;
}
);
};
}]);
'use strict';
var app = angular.module('boloukService', ['ngResource']);
app.factory('Bolouks', function($resource) {
return $resource('/api/bolouks.json', {}, {
create: { method: 'POST', isArray: false }
});
});
我在rails服务器中有以下代码:
bolouks\u controller.rb
:
def create
@bolouk = Bolouk.create(bolouk_params)
if @bolouk.valid?
#@bolouk.save
respond_with @bolouk, :location => api_bolouks_path
else
respond_with @bolouk.errors, :location => api_bolouks_path
end
end
private
def bolouk_params
params.require(:bolouk).permit(:boloukcode, :north, :south, :east, :west)
end
请求正确发送到rails服务器,数据正确保存到数据库,但我无法得到请求的响应,当我运行函数“”时,在chrome控制台中出现以下错误:
TypeError: undefined is not a function
at Scope.$scope.save (http://localhost:3000/assets/controllers/bolouk.js?body=1:19:39)
at http://localhost:3000/assets/angular.js?body=1:10973:21
at http://localhost:3000/assets/angular.js?body=1:20088:17
at Scope.$eval (http://localhost:3000/assets/angular.js?body=1:12752:28)
at Scope.$apply (http://localhost:3000/assets/angular.js?body=1:12850:23)
at HTMLFormElement.<anonymous> (http://localhost:3000/assets/angular.js?body=1:20087:21)
at HTMLFormElement.jQuery.event.dispatch (http://localhost:3000/assets/templates/jquery-1.10.2.js?body=1:4627:9)
at HTMLFormElement.elemData.handle (http://localhost:3000/assets/templates/jquery-1.10.2.js?body=1:4295:46)
TypeError:未定义不是函数
在范围内。$Scope.save(http://localhost:3000/assets/controllers/bolouk.js?body=1:19:39)
在http://localhost:3000/assets/angular.js?body=1:10973:21
在http://localhost:3000/assets/angular.js?body=1:20088:17
在范围内。$eval(http://localhost:3000/assets/angular.js?body=1:12752:28)
在范围内。$apply(http://localhost:3000/assets/angular.js?body=1:12850:23)
在HTMLFormElement。(http://localhost:3000/assets/angular.js?body=1:20087:21)
在HTMLFormElement.jQuery.event.dispatch(http://localhost:3000/assets/templates/jquery-1.10.2.js?主体=1:4627:9)
位于HTMLFormElement.elemData.handle(http://localhost:3000/assets/templates/jquery-1.10.2.js?主体=1:4295:46)
我想我没有正确地使用。然后在angularjs控制器中,我也检查了$q
方法,但再次得到这个错误。有人有办法解决这个问题吗
var app = angular.module('app',['boloukService']);
app.controller('BoloukCtrl', ['$scope', 'Bolouks', function($scope, Bolouks){
$scope.save = function(){
var user = Bolouks.get();
user.get(function(resp) {
//request successful
}, function(err) {
//request error
});
};
}]);
angular.module('boloukService', ['ngResource']);
app.factory('Bolouks', function($resource) {
var savedData = {}
function get() {
return $resource('/api/bolouks.json', {}, {
create: { method: 'POST', isArray: false}
});
}
return {
get: get
}
});
试试这个:)您已经在同一个变量中分配了这两个模块。这可能与您的代码冲突。因此,请使用以下代码:
bolouk.js:
'use strict';
var app = angular.module('app',['ngResource']);
app.controller('BoloukCtrl', ['$scope', 'Bolouks', function($scope, Bolouks){
$scope.save = function(){
Bolouks.create($scope.bolouk).$promise.then(function(data){
$scope.saveBolouk = data;
})
.catch(function (err) {
console.log(err);
})
};
}]);
boloukService.js:
'use strict';
app.factory('Bolouks', function($resource) {
return $resource('/api/bolouks.json', {}, {
create: { method: 'POST', isArray: false }
});
});
我可以看到您正在使用$resource。因此,您可以使用所有回调函数。只需浏览一下这个docs$promise,它是您可以使用的一种方式。然后,您需要在您的服务中定义它。希望有帮助:)我以前尝试过这种类型的代码,通过这种代码我可以获得保存在数据库中的数据,但如果服务器不保存数据并发送错误,我就无法接收错误。这种代码也不起作用,我会出错。但你的想法很好,现在我正试图改变并使用你的指南。如果你有其他想法,请与我分享。谢谢。你的回答和我的问题有什么不同?我在main.js
文件中添加了ngResources
,我可以在bolouk.js
中使用它,如果我再次将它添加到控制器,我会得到错误。您已经创建了两个模块“app”和“boloukService”。两个模块都分配给同一变量var app。因此,它与代码冲突或覆盖以前的应用程序模块。app
是angularjs控制器的根,我必须定义所有依赖项。我无法删除bolokService.js
的第一行,因为我在这一行中定义了服务的名称,并在app.js
中使用。var app=angular.module('boloukService',['ngResource');表示您正在创建模块并在应用程序变量中引用它们。var-app=角度模块(“app”);表示您正在使用现有的模块名为app。再一次,你在var应用程序中引用。我们知道app是一个全局变量,而不是局部变量,所以在一个变量中,您引用了两个模块。它覆盖了您的代码。您是否使用了此代码。您能告诉我您使用此代码时遇到的错误吗