Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $http.post undefined不是一个函数_Javascript_Angularjs_Post_Routes - Fatal编程技术网

Javascript $http.post undefined不是一个函数

Javascript $http.post undefined不是一个函数,javascript,angularjs,post,routes,Javascript,Angularjs,Post,Routes,我试图在这个控制器中实现一个简单的带有angular的$http post app.controller('LoginCtrl',['$scope','admin','$http',function($scope,$http,admin){ $scope.isAdmin = admin.isAdmin; $scope.logout = admin.logout; $scope.login = function(){ if(!$scope.username

我试图在这个控制器中实现一个简单的带有angular的$http post

app.controller('LoginCtrl',['$scope','admin','$http',function($scope,$http,admin){
    $scope.isAdmin = admin.isAdmin;
    $scope.logout = admin.logout;

    $scope.login = function(){
        if(!$scope.username || !$scope.password ){ return; }
        $http.post('/login',{ username: $scope.username, password: $scope.password });
        $scope.username = '';
        $scope.password = '';
    };
}]);
这部分

$http.post('/login',{ username: $scope.username, password: $scope.password });
正在抛出此错误

TypeError: undefined is not a function
    at l.$scope.login (http://localhost:3000/javascripts/angularApp.js:165:9)
    at hb.functionCall (http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:198:426)
    at Cc.(anonymous function).compile.d.on.f (http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:214:485)
    at l.$get.l.$eval (http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:126:193)
    at l.$get.l.$apply (http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:126:419)
    at HTMLFormElement.<anonymous> (http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:215:36)
    at HTMLFormElement.c (http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:32:363)
TypeError:未定义不是函数
在l.$scope.login(http://localhost:3000/javascripts/angularApp.js:165:9)
打电话(http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:198:426)
at Cc.(匿名函数).compile.d.on.f(http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:214:485)
在1$get.1$eval(http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:126:193)
以1美元获得1美元申请(http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:126:419)
在HTMLFormElement。(http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:215:36)
在HTMLFormElement.c(http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js:32:363)
以下是ui视图的HTML

<script type="text/ng-template" id="/login.html">
    <button id="logout" class="btn btn-default" ng-click="logout()" ng-show="isAdmin()">Log Out</button>
    <div ng-controller="LoginCtrl">
      <form id="login" ng-submit="login()">
        <h2>The Login Page.</h2>
        <label>Username:</label>
        <input type="text" ng-model="username" placeholder="username"/>
        <label>Password:</label>
        <input type="password" ng-model="password" placeholder="password"/>
        <button type="submit" class="btn btn-primary">Submit</button>
      </form>
    </div>
  </script>

注销
登录页面。
用户名:
密码:
提交
我已经检查了语法,一切看起来都是正确的,当我在controllers范围内记录$http时,它被识别为一个对象。但是由于某种原因,我无法发出此post请求,因为抛出了一个错误。我正在使用expressjs为内容提供服务,我当前的“/login”路由只是一个简单的response.send('response sent!')。正如您在HTML中看到的,我正在使用angular ui router,其中我还为它设置了一个.state,如果需要提供,请让我知道

我一直对此感到沮丧,因为这是一个众所周知的功能,我无法在网上找到任何资源来帮助我解决确切的问题。我尝试过在标题和其他在线解决方案中设置内容类型,但没有任何帮助。看起来可能有点愚蠢,但我找不到


如果您能提供任何意见或帮助,我将不胜感激。

依赖项注入顺序错误

app.controller('LoginCtrl', ['$scope', 'admin', '$http',function($scope, $http, admin) { ...
应该是

app.controller('LoginCtrl', ['$scope', '$http', 'admin', function($scope, $http, admin) { ...

您是否尝试将其作为参数转发到登录方法
$scope.login=function($http){
谢谢你,Davidon,我刚刚这么做了,现在我得到一个不同的错误类型error:无法读取未定义的属性'post'。你没有为控制器初始化的依赖项提供正确的列表。
'$scope','admin','http',function($scope、$http、admin
应该是
的“$scope”、“admin”、“http”、函数($scope、admin、$http)
谢谢Davidon,这解决了所有问题。谢谢,成功了!我不知道依赖项注入中服务需要排在第一位,谢谢你帮助像我这样的新手。不必排在第一位。DI的顺序需要与传递到控制器函数中的参数相匹配。