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 相关文章推荐
Javascript常用运算符(Operators)-javascript基础教程
Dec 14 Javascript
JavaScript 内置对象属性及方法集合
Jul 04 Javascript
动感效果的TAB选项卡jquery 插件
Jul 09 Javascript
解析window.open的使用方法总结
Jun 19 Javascript
javascript实现依次输入input自动定焦
Dec 23 Javascript
jQuery中before()方法用法实例
Dec 25 Javascript
jquery判断密码强度的验证代码
Apr 22 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
Sep 04 Javascript
ES6学习笔记之map、set与数组、对象的对比
Mar 01 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
Oct 09 Javascript
js面向对象之实现淘宝放大镜
Jan 15 Javascript
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
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
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
教你如何用node连接redis的示例代码
2018/07/12 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
python处理大数字的方法
2015/05/27 Python
详解Python正则表达式re模块
2019/03/19 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
介绍下Lucene建立索引的过程
2016/03/02 面试题
生物学学生自我评价
2014/01/17 职场文书
村捐赠仪式答谢词
2014/01/21 职场文书
房产公证书范本
2014/04/10 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
挂职学习心得体会
2014/09/09 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL
vue里使用create, mounted调用方法
2022/04/26 Vue.js