热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AngularJS提交表单的方式(一)

英文原文:SubmittingAJAXForms:TheAngularJSWay在AngularJS出现之前,很多开发者就面对了表单提交这一问题。由于提

英文原文:Submitting AJAX Forms: The AngularJS Way


在AngularJS出现之前,很多开发者就面对了表单提交这一问题。由于提交表单的方式繁杂而不同,很容易令人疯掉……然而现在看来,依然会让人疯掉。
今天,我们会看一下过去使用PHP方式提交的表单,现在如何将其转换为使用Angular提交。使用Angular来处理表单,对我而言,是一个“啊哈”时刻(译者:表示了解或发现某事物的喜悦)。即使它甚至都没有涉及多少Angular表层的东西,但是它却帮助用户看到表单提交之后的潜力,并且理解两种数据绑定方式。
我们会使用jQuery平台来进行这个处理过程。所以所要做的工作首先使用Javascript。我们会提交表单,展示错误信息,添加错误类,并且在Javascript中显示和隐藏信息。



之后,我们会使用Angular。在使用之前,我们要做大部分所需的工作,并且我们之前所做的很多工作会非常容易。让我们开始吧。
仅使用jQuery和AJAX提交表单:如果你想看一篇完整的关于仅使用jQuery和AJAX提交表单的文章,请参见我们的另一篇文章:使用jQuery提交表单的方式。
简单的表单
我们会关注两种提交表单的方式:
旧方法:jQuery和PHP提交表单
新方法:AngularJS和PHP提交表单
首先看一下我们的表单,超级简单:
这里写图片描述
submitting-forms-with-angular
形式要求
实现页面无刷新表单处理
输入姓名和超级英雄别名
如果有错误,显示错误提示
如果输入有误,将输入变成红色
如果所有内容ok,显示成功提示
文档结构
在我们的展示中,仅需两个文件
index.html
process.php




表单处理



让我们新建一个PHP来处理表单。该页面非常小并且使用POST方式提交数据。
处理表单:这对我们来说并不是那么重要的。你可以使用其他你喜欢的语言来处理你的表单。
// process.php

$errors = array(); // array to hold validation errors
$data = array(); // array to pass back data// validate the variables ======================================================if (empty($_POST['name']))$errors['name'] = 'Name is required.';if (empty($_POST['superheroAlias']))$errors['superheroAlias'] = 'Superhero alias is required.';// return a response ===========================================================// response if there are errorsif ( ! empty($errors)) {// if there are items in our errors array, return those errors$data['success'] = false;$data['errors'] = $errors;} else {// if there are no errors, return a message$data['success'] = true;$data['message'] = 'Success!';}// return all our data to an AJAX callecho json_encode($data);

这是一个非常简单的表单处理脚本。我们仅检查数据是否存在,如果存在,则不做任何处理和操做;如果不存在,则需要向$errors数组中添加一条信息。
为了返回我们的数据用于AJAX调用,我们需要使用echo和json_encode。这就是我们PHP表单处理所有需要做的操作。使用普通的jQuery AJAX或者Angular处理表单也是这样的。


展示表单



让我们创建一个HTML来展示我们的表单


<html>
<head><title>Angular Formstitle><link rel&#61;"stylesheet" href&#61;"//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css"><script src&#61;"//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js">script><script>script>
head>
<body>
<div class&#61;"container">
<div class&#61;"col-md-6 col-md-offset-3"><div class&#61;"page-header"><h1><span class&#61;"glyphicon glyphicon-tower">span> Submitting Forms with Angularh1>div><div id&#61;"messages">div><form><div id&#61;"name-group" class&#61;"form-group"><label>Namelabel><input type&#61;"text" name&#61;"name" class&#61;"form-control" placeholder&#61;"Bruce Wayne"><span class&#61;"help-block">span>div><div id&#61;"superhero-group" class&#61;"form-group"><label>Superhero Aliaslabel><input type&#61;"text" name&#61;"superheroAlias" class&#61;"form-control" placeholder&#61;"Caped Crusader"><span class&#61;"help-block">span>div><button type&#61;"submit" class&#61;"btn btn-success btn-lg btn-block"><span class&#61;"glyphicon glyphicon-flash">span> Submit!button>form>div>
div>
body>
html>

现在&#xff0c;我们有了表单。我们另外还使用了Bootstrap来使表单看起来不是那么丑。使用Bootstrap语法规则&#xff0c;每个input下含有一个spot来展示我们文本的错误信息。
这里写图片描述


使用jQuery提交表单



现在&#xff0c;让我们来使用jQuery处理表单提交。我会将所有的代码添加到空的

...<script>$(document).ready(function() {// process the form$(&#39;form&#39;).submit(function(event) {// remove the past errors$(&#39;#name-group&#39;).removeClass(&#39;has-error&#39;);$(&#39;#name-group .help-block&#39;).empty();$(&#39;#superhero-group&#39;).removeClass(&#39;has-error&#39;);$(&#39;#superhero-group .help-block&#39;).empty();// remove success messages$(&#39;#messages&#39;).removeClass(&#39;alert alert-success&#39;).empty();// get the form datavar formData &#61; {&#39;name&#39; : $(&#39;input[name&#61;name]&#39;).val(),&#39;superheroAlias&#39; : $(&#39;input[name&#61;superheroAlias]&#39;).val()};// process the form$.ajax({type : &#39;POST&#39;,url : &#39;process.php&#39;,data : formData,dataType : &#39;json&#39;,success : function(data) {// log data to the console so we can seeconsole.log(data);// if validation fails// add the error class to show a red input// add the error message to the help block under the inputif ( ! data.success) {if (data.errors.name) {$(&#39;#name-group&#39;).addClass(&#39;has-error&#39;);$(&#39;#name-group .help-block&#39;).html(data.errors.name);}if (data.errors.superheroAlias) {$(&#39;#superhero-group&#39;).addClass(&#39;has-error&#39;);$(&#39;#superhero-group .help-block&#39;).html(data.errors.superheroAlias);}} else {// if validation is good add success message$(&#39;#messages&#39;).addClass(&#39;alert alert-success&#39;).append(&#39;

&#39; &#43; data.message &#43; &#39;

&#39;);}}});// stop the form from submitting and refreshingevent.preventDefault();});});script>...

这里处理表单有不少的代码。我们有获取表单中变量的代码&#xff0c;有使用AJAX将数据发送至我们的表单的代码&#xff0c;有检查是否有错和显示成功提示的代码。除此之外&#xff0c;我们希望每次表单提交之后&#xff0c;过去的错误信息都会被清除。确实是不少代码。
现在&#xff0c;如果表单中含有错误&#xff0c;则&#xff1a;
这里写图片描述
如果提交成功&#xff1a;
这里写图片描述
现在&#xff0c;让我们看使用Angular来提交相同的表单。记住&#xff0c;我们不需要更改任何关于我们的PHP如何处理表单的内容&#xff0c;我们的应用依然会具备相同的功能&#xff08;在同一个地方展示错误和成功信息&#xff09;。

AngularJS 提交表单的方式(二)


推荐阅读
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了使用FormData对象上传文件同时附带其他参数的方法。通过创建一个表单,将文件和参数添加到FormData对象中,然后使用ajax发送POST请求进行文件上传。在发送请求时,需要设置processData为false,告诉jquery不要处理发送的数据;同时设置contentType为false,告诉jquery不要设置content-Type请求头。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 随着前端技术的发展,越来越多的开发者开始使用react、vue等web框架,但很少有人深入理解这些框架的源码。然而,这些框架底层都是由原生的javascript构建而成。对于初学前端的人来说,可能会认为javascript很容易上手,但实际上只是因为它被高度封装了。与能够使用封装类的人相比,能够理解框架原理的人则处于另一个层面。本文将深入剖析jquery源码,探寻框架底层的原理,帮助读者更好地理解web框架的运行机制。 ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
author-avatar
Zhangjingy2502870421
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有