AngularJS $ http.post(..) - 错误:$ http未定义

时间:2013-02-27 12:30:36

标签: angularjs

我第一次尝试使用AngularJS。使用$http.post("url", data)功能时,我收到了Error: $http is not defined控制台消息。

在我的HTML页面顶部,我在所有其他JS导入之后包含AngularJS。

由于小部件依赖等,我还包含了其他JavaScript库。我的脚本导入部分如下所示:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
<script src="http://www.trirand.com/blog/jqgrid/js/i18n/grid.locale-en.js" type="text/javascript"></script>
<script src="http://www.trirand.com/blog/jqgrid/js/jquery.jqGrid.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script>

我有一个控制器,我用它来向服务器发送一些数据:

function FormCtrl($scope) {
  $scope.sendData = function(){
        var data = "firstName=" + $scope.firstName + "&" +
            "lastName=" + $scope.lastName + "&" +
            "address=" + $scope.address + "&" +
            "postcode=" + $scope.postcode;

        $http.post("/data/person/put", data);
     };
}

sendData功能附加到按钮上。一切正常,直到调用$http.post(...),此时控制台输出错误。

完整的错误列表是:

Error: $http is not defined
$scope.sendData@http://localhost:8080/angularjs/:96
Mc/x/<@https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js:71
ec[c]</</</<@https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js:142
e.prototype.$eval@https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js:87
e.prototype.$apply@https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js:87
ec[c]</</<@https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js:142
c.event.handle@http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js:63
c.event.add/o@http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js:57

https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js
Line 61

我是否必须做其他事情来配置AngularJS以使用$http.post功能?

我直接从文档的AngularJS 快捷方式部分提取了用法:http://docs.angularjs.org/api/ng.$http

有人可以帮忙吗?

由于 亚当

1 个答案:

答案 0 :(得分:23)

function FormCtrl($scope) {应为function FormCtrl($scope, $http) {

您需要注入控制器所需的所有服务,在这种情况下,您使用的是$scope$http服务,但是您只注入了$scope,这是错误。

例如:

function FormCtrl($scope, $http) {
    ....
}
FormCtrl.$inject = ['$scope', '$http'];

您可以通过缩小here阅读有关注射并发症的说明,请阅读A Note on Minification