我需要从我的HTML页面执行以下操作:
- 用户输入电子邮件和密码进行注册
- 当用户单击“提交”时,表单被发送到控制器
- 控制器使用AJAX创建JSON请求到RESTful服务器,服务器相应响应。
- 根据服务器的响应,用户应该得到警报窗口,并在当前页面(
register.html
)下方“提交”之下打印一条消息。如果是“成功-注册”或“失败-无法注册”。
但目前它的工作方式是:1),2),3)按预期工作。
用户首次点击
提交
时会弹出警报窗口并显示适当的消息。用户仅在再次单击
提交
时才会打印消息,但再次,这会显示警报窗口。
如果我从JS中删除alert('Something')
,则必须单击两次才能将消息打印到register.html
此外,我想提醒您,连续点击两次也会使服务器调用两次。它的行为就像在服务器调用后暂停,然后要打印消息,我应该单击提交。
register.html
<div class='container'>
<div class='col-md-12'>
<div class='fill' ng-controller="registerController">
<form name="userForm" ng-submit="submitForm(userForm.$valid,user)" novalidate>
<!-- ALL FORM ELEMENTS HERE -->
<button type="submit" class="btn btn-primary" ng-disabled="userForm.$invalid" ng-click="showme=true">
Submit
</button>
<div class="wrapper">
<h3 ng-show="showme"><em>{{msgalert}}</em></h3>
</div>
</form>
</div>
</div>
</div>
我的JS控制器如下所示:
stackoverflow_q3.js
。// create angular controller
var register = angular.module('Main-app');
register.controller('registerController', function ($scope, $http, $location) {
// function to submit the form after all validation has occurred
$scope.submitForm = function (isValid, user) {
console.log('Stackoverflow JS func caled');
var regData = {
"email": user.email,
"password": user.password1
};
var jsonData = JSON.stringify(regData);
var request = $.ajax({
url: 'myurl',
type: 'POST',
data: jsonData,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
dataType: 'json',
complete: function (response) {
console.log(response.responseText);
if (response.responseText == 'success') {
console.log('Registration Success');
alert('Success');
$scope.msgalert = 'Registration Success, Proceed to Login and Continue';
} else if (response.responseText == 'fail') {
alert('registration failed');
$scope.msgalert = 'Registration Failed, Please try again';
}
}
});
};
});
同时在 index.html
文件中,我提到了控制器:
<!-- HTML -->
<!DOCTYPE html>
<html ng-app="Main-app">
<!-- Controllers -->
<script src="js/controllers/stackoverflow_q3.js" type="text/javascript"></script>
<!-- Other elements -->
</html>
有什么办法能够在只提交一次的情况下完成所有这些活动呢?
ng-show=msgalert
,而不是ng-show=showme
。 - jperezov$http
函数,却使用jQuery的ajax
函数?一般来说,在Angular中,您需要创建服务,并在控制器中调用它。 - jperezov