我需要从HTML页面执行以下活动:
Submit
register.html
在“提交”下方的当前页面()上显示一条消息。如果是“成功-已注册”或“失败-无法注册”。但是,目前它的工作方式如下:1),2),3)正常工作。
用户在第一次单击Submit
相应的消息时会得到警报窗口。
用户仅在Submit
再次 单击时获得打印的消息,但再次显示警告窗口。
如果我alert('Something')
从JS中删除,则必须单击两次以将消息打印在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>
知道如何通过一次“提交”单击即可完成所有这些活动吗?
只需执行以下操作:$timeout
在控制器中注入服务并将代码包装如下:
complete: function(response) {
console.log(response.responseText);
$timeout(function() {
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';
}
});
}
另外,像这样更改您的HTML代码:
<h3 ng-show="msgalert"><em>{{msgalert}}</em></h3>
因此在Angular中有一个摘要循环的概念。如果您正在Angular上下文之外进行某些操作(例如您正在使用jQuery AJAX来获取数据并更新的$
scope变量msgalert
),我们必须告诉Angular数据中已有更改。
因此,在您从服务器获得响应并更新了之后msgalert
,Angular不会意识到该更改,因为它不在Angular的上下文之外,因此触发了Angular的新摘要循环,并且视图未更新。
之所以会这样,是因为当您再次单击表单中的“提交”按钮时,将在后台触发Angular的摘要循环,然后显示您的实际消息。
为了解决这个问题,我们使用服务将您的自定义(外部角度上下文)代码包装到Angular的上下文中,该$timeout
服务立即通知Angular值msgalert
已更改
(可选)您可以$scope.$apply()
在if-else
条件之后编写after,但是有时会引发异常,digest cycle is already in progress
因为调用$scope.$apply()
,我们会手动触发Angular的摘要周期。这就是为什么$timeout
服务更清洁的原因。
更新资料
请注意,您根本不需要使用jQuery来进行AJAX调用。Angular提供$http
服务,使用它您将根本不会遇到该问题。您可以这样编写代码:
$scope.submitForm = function (isValid, user) {
var regData = {
email: user.email,
password: user.password1
};
$http({
method: "POST",
url: "myurl",
data: regData, // You don't need to stringify it and no need to set any headers
}).then(function (response) {
// Success callback
console.log(response.responseText);
if (response.responseText == 'success') {
$scope.msgalert = 'Registration Success, Proceed to Login and Continue';
} else if (response.responseText == 'fail') {
$scope.msgalert = 'Registration Failed, Please try again';
}
}, function() {
// Error callback
});
};
问题内容: 我有一个模式表单,用户必须完成表单(否则验证将显示必填字段错误消息),然后单击“提交输入类型”,不执行任何操作,然后再次单击它,然后将通过ajax发布,并返回“谢谢”消息。 我环顾了Stackoverflow,并为遇到的问题应用了答案,但仍然无法正常工作。我确实删除了event.preventDefault(); 从中,以及$(“#review- form”)。submit(funct
问题内容: 我有一个要通过jQuery捕获并通过AJAX发送的表单。我的问题是,每次刷新页面时,表单都会提交多次。 我尝试取消绑定“提交”按钮,但通常在第一次提交后发布表单。任何帮助,将不胜感激 问题答案: 您最有可能正在使用或触发ajax事件。试试这个:
问题内容: 最近,到目前为止,我已经跳入angularjs及其精彩。我一直在通过$ http服务发送AJAX请求。今天,我震惊地发现没有简单的方法可以做到(据我所知)。通过谷歌和SO进行搜索使我无所适从复杂的复杂解决方案。 尽管我现在最终使用了JQuery,但对于像JQuery ajax这样能够发送表单的东西是否真的可用感到好奇。这是简单的JQuery代码,用于说明正在讨论的内容 问题答案: 有一
Framework7 可以通过ajax自动提交 有两种自动提交方式: 当用户提交了表单 (点击了提交按钮) 或者当通过代码触发了 "submit" 事件 当用户更改了表单的内容,或者当通过代码触发了 "change" 事件 submit时提交表单数据 只需要添加 "ajax-submit" class 在form上,当submit时就会自动通过ajax发送表单数据 <form action="se
问题内容: 我是stackoverflow和CodeIgniter的新手,目前正在尝试在Internet上找到的一些简单代码示例,以开始使用。我现在正在处理的是一种使用CI和Ajax(jQuery)的表单,并将表单的输入保存在数据库中,然后在表单的同一页上显示最新的表单。如果我感到困惑,那是这里的4.7应用示例。最初的源代码位于此处,但为了与最新版本的CI配合使用,我对其进行了修改,并在下面引用了
本文向大家介绍angularJS提交表单(form),包括了angularJS提交表单(form)的使用技巧和注意事项,需要的朋友参考一下 代码很简单,就不多废话了,直接奉上代码: 这里给大家分享的是最基础的angularJS表单验证,希望大家能够喜欢。