ashish kumar ashish kumar -5 years ago 205
jQuery Question

angular.js:12520 TypeError: Cannot read property 'post' of undefined

I am very much new to angularjs, i have look many webpages but not get any concrete solutions.

What i am trying to achieve is i am creating one factory service to authenticate the user. After successful authentication it navigate to dashboard page.

i am getting the following error:

angular.js:12520 TypeError: Cannot read property 'post' of undefined
at Object.factory.authentication (login.html:74)
at r.$scope.loginCall (login.html:65)
at fn (eval at compile (angular.js:13365), <anonymous>:4:218)
at e (angular.js:23613)
at r.$eval (angular.js:16052)
at r.$apply (angular.js:16152)
at HTMLInputElement.<anonymous> (angular.js:23618)
at HTMLInputElement.dispatch (jquery-1.9.1.min.js:3)
at HTMLInputElement.v.handle (jquery-1.9.1.min.js:3)

My Html Code is :

<div ng-app="loginFormApp" ng-controller="loginFormCtrl">

<form method="post" action="" id="login_form" class="row">
<input type="text" placeholder="Login ID" ng-model="loginId" >
<input type="password" placeholder="Password" ng-model="password" >
<input type="button" class="btn btn-theme" ng-click="loginCall()" value="Login">
<input type="button" class="btn btn-theme" ng-click="loginCall()" value="Register Here">

my controller is :

var app = angular.module('loginFormApp', []);
app.controller('loginFormCtrl', function($scope, $http, AuthService) {
$scope.loginCall = function() {



My Factory Service is :

app.factory('AuthService', function() {
var factory = {};
factory.authentication = function($http) {
$"", {
'userName': $scope.loginId,
'password': $scope.password
.then(function(response) {

window.location.href = "";
return factory;

Answer Source

In the Factory method, you are not injecting $http and hence its undefined when you access it.

Please refer the below code

app.factory('AuthService', function ($http) {
return {
    authentication : function (UserName, Password) {
        $"", { 'userName': UserName, 'password': Password})
            .then(function (response) { window.location.href = "";}, 
                  // Error Handling
                  function (response) {console.log(response)});

So, if you observe I removed the scope and instead I am passing the login data as parameters which will work as injecting $scope is not recommended.

-- Farhan

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download