2014-10-31 3 views
1

Я погуглить это в течение нескольких часов ...

вот мой angularJS код:

var FrontControllers = angular.module('FrontControllers', []); 

FrontControllers.controller('LoginController', ['$scope', '$http', function($scope, $http){ 

    $scope.user = {}; 

    $scope.login = function() { 
     console.log($scope.user); 
     $http({ 
      url: '/webapi/login', 
      method: 'POST', 
      data: $scope.user 
     }).success(function (data) { 
      alert("success!"); 
     }).error(function(data) { 
      alert("failed =("); 
     }); 

    }; 
}]); 

вот Прилагаемый HTML

<div ng-controller="LoginController" id="login" class="box"> 

    <form novalidate role="form" action="/webapi/login" id="loginForm">     
     <label for="signin" class="sr-only">Email or Username</label> 
     <input ng-model="user.username" type="text" autofocus class="form-control input-lg" id="username" name="username" size="20" placeholder="email or username"> 

     <label for="password" class="sr-only">Password</label> 
     <input ng-model="user.password" type="password" class="form-control input-lg" id="password" name="password" size="10" placeholder="password"> 

     <button ng-click="login()" type="submit" class="btn btn-lg btn-bright btn-block">Login</button> 
    </form> 

</div> 

Независимо от того, что я делаю, я получаю запрос POST, который отменяется. Ранее мне удалось войти в/webapi/login со стандартным кодом jQuery ajax. Сервер настроен для AJAX, поэтому нет необходимости в заголовке urlencode. Полезная нагрузка выглядит правильно, идентично той, которая отправлена ​​jQuery ajax.

В чем может быть проблема?

Это от Chrome разработчика/сети:

Provisional headers are shown 
Accept:application/json, text/plain, */* 
Content-Type:application/json;charset=UTF-8 
Origin:http://ec2-54-86-242-50.compute-1.amazonaws.com 
Referer:http://ec2-54-86-242-50.compute-1.amazonaws.com/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36 
X-DevTools-Emulate-Network-Conditions-Client-Id:BB96CDC3-AD63-D024-E814-4726DF4843D8 

ответ

1

Угловая не preventDefault(), если параметр action установлен. См. here

По этой причине «Угловая» предотвращает действие по умолчанию (отправка формы на сервер), если у элемента не указан атрибут действия.

Вы, вероятно, следует также использовать ng-submit="login() на <form> вместо ng-click, так что он будет представлять форму, когда пользователь нажимает Enter

+0

спасибо! Удаление рабочего параметра. (и я мог буквально поцеловать вас. Я потратил 4 часа, пытаясь заставить глупую форму работать.) – claireablani

+0

Спасибо Остин! Я не могу выразить чувства, но это сработало для меня, когда я удалил ключевое слово action с html-страницы. Спасибо тонну! :) – virsha

0

Попробуйте удалить форму-х

action="/webapi/login" 

и кнопки он

type="submit" 
+0

Это работает, как хорошо. Я дал другой ответ галочку, потому что он появился первым. Спасибо! – claireablani

Смежные вопросы