JQuery打造PHP的AJAX表单提交实例


Posted in Javascript onNovember 03, 2009

如果你对JQuery的基本语法还不是很熟悉,请搜索本站的教程资源。如果你对PHPMailer用法不熟悉,请查看本站的另一篇文章《使用PHPMailer类库发送电子邮件》。

第一步,创建一个表单HTML页面

这里,我们只展示主要的表单部分HTML结构代码:

<div id="contact_form"> 
<form name="contact" method="post" action=""> 
<fieldset> 
<label for="name" id="name_label">姓名</label> 
<input type="text" name="name" id="name" size="30" value="" class="text-input" /> 
<label class="error" for="name" id="name_error">此项必填</label> <label for="email" id="email_label">您的Email</label> 
<input type="text" name="email" id="email" size="30" value="" class="text-input" /> 
<label class="error" for="email" id="email_error">此项必填</label> 
<label for="phone" id="phone_label">您的联系电话</label> 
<input type="text" name="phone" id="phone" size="30" value="" class="text-input" /> 
<label class="error" for="phone" id="phone_error">此项必填</label> 
<br /> 
<input type="submit" name="submit" class="button" id="submit_btn" value="我要发送" /> 
</fieldset> 
</form> 
</div>

几点注意:

这里用一个id为contact_form来包含整个包含信息;这是有意义的,稍后在JavaScript与用户交互信息的时候会用到。
大家应该注意到了,这里form标签的属性里面既包含了method和action;这个意义其实不大,因为Javascript直接操作DOM,所以没有这两个属性也是可以的;
务必要给用户输入的<input>标签加独立的id,这和第二点原理类似。否则,无法看到正常的效果。

第二步,开始添加JQuery代码

这里假设你已经从JQuery官方网站上下载了JQuery基库,然后上传到了你的WEB服务器,并添加到你要使用的网页中了。

现在另外新建一个JS文件,添加如下代码:

$(function() { 
$(".button").click(function() { 
// 处理表单验证和交给后台处理的逻辑 
}); 
});

第一行的function()函数与Jquery的document.ready函数用法和功能相同,都是在DOM准备完毕后自动触发。
第二行里面是一个单击触发函数click(),需要注意的是,在HTML一页提交按钮上需要放置一个名为“button”的Class,以模拟实现submi提交表单的功能.
从第二点我们可以看出,JQuery可以很好的将结构和逻辑分离。
第三步,编写验证代码

在实际应用中,这一步是必不可少的。在用户漏填,错填某个项目时,及时提示。

$(function() { 
$('.error').hide(); 
$(".button").click(function() { 
// 验证代码 
$('.error').hide(); 
var name = $("input#name").val(); 
if (name == "") { 
$("label#name_error").show(); 
$("input#name").focus(); 
return false; 
} 
var email = $("input#email").val(); 
if (email == "") { 
$("label#email_error").show(); 
$("input#email").focus(); 
return false; 
} 
var phone = $("input#phone").val(); 
if (phone == "") { 
$("label#phone_error").show(); 
$("input#phone").focus(); 
return false; 
} 
}); 
});

几点注意:
第2行,我们添加一个$('.error').hide()是为了在用户未输入任何信息时隐藏三个class="error"提示错误的label标签。而只有当出现错误,即为空时,错误才会出现。(因为有return false的作用,每次仅会出现一个错误)
在JQuery里面,获取DOM中某个ID或者Class的值非常简单
//获取id的值 
var name = $("input#name").val(); 
//获取class序号为1的值 
var name = $(".name")[1].val(); 
现假设用户没有输入姓名,处理逻辑应该是:首先显示错误,然后将焦点定位在姓名上。 
if (name == "") { //用户名为空 
$("label#name_error").show(); //错误提示 
$("input#name").focus(); //焦点定位 
return false; //返回 
}

在必填的字段上验证时,都必须return false,否则会出现必填项未填完即提交的情况。
第四步,通过Jquery的Ajax函数提交表单信息。

这是本教程实现无刷新提交的核心步骤,通过ajax函数来递交javascript从DOM中获取的表单项值,然后异步提交给后台处理程序(process.php),并发送Email。此步紧接在验证程序之后:

var dataString = 'name='+ name + '&email=' + email + '&phone=' + phone; 
//alert (dataString);return false; $.ajax({ 
type: "POST", 
url: "bin/process.php", 
data: dataString, 
success: function() { 
$('#contact_form').html("<div id='message'></div>"); 
$('#message').html("<h2>联系方式已成功提交!</h2>") 
.append("<p>Script by Code52.net</p>") 
.hide() 
.fadeIn(1500, function() { 
$('#message').append("<img id='checkmark' src='images/check.png' />"); 
}); 
} 
}); 
return false;

以上代码的核心函数是.ajax() ,它所起得作用就是使用POST方式将已经获取的表单信息(dataString)异步传送给所定义的后台PHP url(bin/process.php)。如果数据成功传送,它会将一系列我们定义好的信息返回给用户。最后return false,这样是为了防止页面重新加载。
除了返回成功信息和发送邮件外,我们还可以做其他一些更广泛的事情。比如,将获得的数据交由后台脚本处理时,将数据插入数据库中,然后再将用户提交的信息返回。
详细解释:

首先,获取表单项的值,方法我们已经在第三步中提到过了:
var name = $("input#name").val();
var email = $("input#email").val();
var phone = $("input#phone").val();
//将表单项的值组合成一个字符串
var dataString = 'name='+ name + '&email=' + email + '&phone=' + phone;
将此组合字符串的值通过AJAX函数传递给后台url,如果成功,则会返回成功信息给用户:

$.ajax({ 
type: "POST", 
url: "bin/process.php", 
data: dataString, 
success: function() { 
$('#contact_form').html("<div id='message'></div>"); 
$('#message').html("<h2>Contact Form Submitted!</h2>") 
.append("<p>We will be in touch soon.</p>") 
.hide() 
.fadeIn(1500, function() { 
$('#message').append("<img id='checkmark' src='images/check.png' />"); 
}); 
} 
}); 
return false;

在本示例中,ajax函数的功能就只有这些了,如果你需要进一步关于ajax函数的信息,可以参考官方文档:jQuery's documentation on the ajax function
第五步,反馈信息给用户的部分

首先,在信息提交成功之后,JQuery会通过以下部分动态的替换掉<div id="contact_form"></form>中的内容,只需要简单的一句话即可实现。
$('#contact_form').html("<div id='message'></div>");
所以请大家记住,如果你以后需要通过JavaScript动态的替换掉某个层或者<span>,可以使用Jquery的.html方法实现,非常简单和方便。
其次,有了这个层肯定还不够,因为里面还没有内容,所以,我们还要给id=message的这个层添加一些显示内容:
$('#message').html("<h2>联系方式已成功提交!</h2>")
同样是动态的为id为message的层添加了一段html用于提示。还可以利用append方法在message层中追加一句:
.append("<p>We will be in touch soon.</p>")
最后,为了表现出提交之后,服务器处理的动态效果,我们设置了以下特效代码:
.hide() //整个层消失
.fadeIn(1500, function() {//在1500毫秒内逐渐出现
//最后再动态追加一个成功图标
$('#message').append("<img id='checkmark' src='images/check.png' />");
});

后记:如果要将此实例运用在实际中,可能还需要对一些地方做出修改。比如,增加验证信息规则,在用户提交信息的过程中设置一个Loading的图标等等,本教程仅作抛砖引玉之用了。另外,请注意,后台提交数据给邮箱,我这里就不再解释了。打包下载的实例中有很详细的注释,你需要改动的地方仅仅是用户名和密码。下载压缩包之后,你也许会发现里面有个runonload.js文件,此文件的作用是在加载表单文件时,将焦点聚焦在输入表单上,仅此而已。

Javascript 相关文章推荐
用于table内容排序
Jul 21 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
Mar 24 Javascript
Bootstrap CSS布局之列表
Dec 15 Javascript
Jquery实现跨域异步上传文件总结
Feb 03 Javascript
Vue+Element使用富文本编辑器的示例代码
Aug 14 Javascript
Vue入门之数据绑定(小结)
Jan 08 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
Feb 12 Javascript
angular 实现下拉列表组件的示例代码
Mar 09 Javascript
ios中视频的最后一桢问题解决
May 14 Javascript
微信小程序中网络请求缓存的解决方法
Dec 29 Javascript
JavaScript常用8种数组去重代码实例
Sep 09 Javascript
利用js canvas实现五子棋游戏
Oct 11 Javascript
jQuery get和post 方法传值注意事项
Nov 03 #Javascript
js window.onload 加载多个函数的方法
Nov 02 #Javascript
深入认识javascript中的eval函数
Nov 02 #Javascript
javascript 按回车键相应按钮提交事件
Nov 02 #Javascript
JQuery 解析多维的Json数据格式
Nov 02 #Javascript
javascript(jquery)利用函数修改全局变量的代码
Nov 02 #Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
Nov 02 #Javascript
You might like
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
Python的另外几种语言实现
2015/01/29 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
python爬取内容存入Excel实例
2019/02/20 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
学术会议主持词
2014/03/17 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
精彩的演讲稿开头
2014/05/08 职场文书
ktv好的活动方案
2014/08/17 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
《怀念母亲》教学反思
2016/02/19 职场文书