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 相关文章推荐
jQuery 操作下拉列表框实现代码
Feb 22 Javascript
web前端开发也需要日志
Dec 09 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
May 07 Javascript
jquery结合CSS使用validate实现漂亮的验证
Jan 29 Javascript
简单纯js实现点击切换TAB标签实例
Aug 23 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
May 16 Javascript
原生js实现秒表计时器功能
Feb 16 Javascript
vue2.0构建单页应用最佳实战
Apr 01 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
May 09 Javascript
vue引入js数字小键盘的实现代码
May 14 Javascript
vue-cli安装使用流程步骤详解
Nov 08 Javascript
Vue入门之数量加减运算操作示例
Dec 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
一个SQL管理员的web接口
2006/10/09 PHP
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
2007/08/19 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
php利用array_search与array_column实现二维数组查找
2019/07/08 PHP
Gird事件机制初级读本
2007/03/10 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
ReactNative页面跳转Navigator实现的示例代码
2017/08/02 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
python网络编程示例(客户端与服务端)
2014/04/24 Python
python自动12306抢票软件实现代码
2018/02/24 Python
redis之django-redis的简单缓存使用
2018/06/07 Python
Python版名片管理系统
2018/11/30 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
python实现函数极小值
2019/07/10 Python
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
巴西购物网站:Estrela10
2018/12/13 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
小溪流的歌教学反思
2014/02/13 职场文书
大学应届生的自我评价
2014/03/06 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
安全责任书
2015/01/29 职场文书
党支部培养考察意见
2015/06/02 职场文书
任长霞观后感
2015/06/16 职场文书
母亲节感言
2015/08/03 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
详解Redis基本命令与使用场景
2021/06/01 Redis