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 相关文章推荐
可以文本显示的公告栏的js代码
Mar 11 Javascript
Javascript计算时间差的函数分享
Jul 04 Javascript
JS匀速运动演示示例代码
Nov 26 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
Nov 24 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
Dec 22 Javascript
JQuery点击行tr实现checkBox选中的简单实例
May 26 Javascript
详解能在多种前端框架下使用的表格控件
Jan 11 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
Mar 13 Javascript
JS运动改变单物体透明度的方法分析
Jan 23 Javascript
如何在wxml中直接写js代码(wxs)
Nov 14 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
Dec 04 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 图片文件上传实现代码
2010/12/29 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
javascript+mapbar实现地图定位
2010/04/09 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
Python中的localtime()方法使用详解
2015/05/22 Python
Python基于DES算法加密解密实例
2015/06/03 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
全面解析Python的While循环语句的使用方法
2015/10/13 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
python实现随机加减法生成器
2020/02/24 Python
python爬虫中PhantomJS加载页面的实例方法
2020/11/12 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
办公室文秘自我评价
2013/09/21 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
人力资源主管职责范本
2014/03/05 职场文书
个人自我鉴定总结
2014/03/25 职场文书
倡议书格式
2014/04/14 职场文书
老兵退伍标语
2014/10/07 职场文书
导游词之岳阳楼
2019/09/25 职场文书
javascript canvas实现雨滴效果
2021/06/09 Javascript