我们在制作模板的过程中,经常会使用到留言板等表单提交功能,常规的表单提交方式每次提交会有一个跳转,对访客不友好。有没有更好的UEO(用户体验)方案呢?有的,PbootCms有留言、表单的API接口,我们来做一个Ajax方式提交留言 。

实现过程
首先,写好表单的HTML代码。
<div class="form"> <form action="" method="post"> <div class="unit-group input"> <div class="uk-grid"> <div class="uk-width-1-2@m unit unit-left"> <input id="Contacts" class="tm-transition" type="text" name="contacts" placeholder="您的称呼:"> </div> <div class="uk-width-1-2@m unit unit-right"> <input id="Home_contact_mail" class="tm-transition" type="text" name="home_contact_mail" placeholder="您的邮箱:"> </div> </div> </div> <div class="unit-group textarea"> <textarea id="Content" class="tm-transition" name="content" placeholder="请输入您想要跟我们说的话"></textarea> </div> <div class="uk-text-center unit-group button"> <button class="tm-transition" type="submit">联系我们</button> </div> </form> </div>
上面的代码其实不重要,关键就是表单的action留空,表单元素(input、tetxerea等)的name和后台的表单字段对应。
其他的就根据自己页面样式需求来写即可。
接下来是重点:
1、首先Ajax提交需要在表单的按钮点击的时候触发。
//.hengbok-home-contact button 就是表单中的button提交按钮
jQuery('.hengbok-home-contact button').on('click', function(){
//执行代码
});
注:以下的代码都写在上面的执行代码中。
2、定义一些需要用到的变量。
var url = '/api.php/cms/addmsg'; //Api的地址,我这里是留言接口,如果自定义表单的话填写表单接口
//定义data对象,默认包含appid,timestamp和signature
var data = {
appid: '{@pboot:appid}',
timestamp: '{@pboot:timestamp}',
signature: '{@pboot:signature}',
};
//定义一个空数组,用来储存表单提交过来的内容
var parm = new Array();
//将表单提交过来的内容储存到数组中去
parm['contacts'] = jQuery('#Contacts').val();
parm['home_contact_mail'] = jQuery('#Home_contact_mail').val();
parm['content'] = jQuery('#Content').val();
//循环数组,将表单提交的内容添加到data对象中
for (var i in parm) {
data[i] = parm[i];
}
请手动删除代码中的@符号,本站基于PbootCms搭建,加@符号防止解析
3、发起Ajax请求。
//通过第二步,构建了Api所需的url和data,接下来就可以发起Ajax请求了
jQuery.ajax({
type: 'POST', //提交的类型为 POST
url: url, //url地址为上面定义的url变量
dataType: 'json', //提交的数据类型为 json
data: data, //提交的数据为上面构建的数据
//提交成功
success: function( response, status ){
//Api返回的内容,例如“留言成功”,“留言失败”等
var Data = response.data;
//如果成功,返回的code为1,失败返回0
if( response.code == 1 ){
//留言成功,向页面的DOM插入成功提示,更改样式。如果需要其他操作就自由发挥吧。
jQuery('.status .text').text('感谢您的留言,我们会尽快跟您联系!');
jQuery('.status').removeClass('error');
jQuery('.status').addClass('open success');
return false;
} else {
//留言失败,比如某个字段没有填写,返回XXX字段为空这样的提示。
jQuery('.status .text').text( Data );
jQuery('.status').removeClass('success');
jQuery('.status').addClass('open error');
return false;
}
},
//提交失败,将信息输出到控制台查看
error: function( xhr, status, error ){
console.log( error );
}
});
//Ajax提交后返回false,防止因为点击了表单的提交按钮造成的页面跳转。(实际上Ajax提交留言不一定需要form标签,不过写代码还是规范点比较好)
return false;
4、完善Ajax留言。
//因为Api没有验证码,并且PbootCMS默认也只是简单验证字段是否为空,所以在Ajax提交的时候稍微做一些简单的表单验证。
//验证表单字段是否为空,在“将表单提交过来的内容储存到数组”之前验证。
if( parm['xxx'] == '' ){
jQuery('.status .text').text('请输入xxx。'); //如果为空的话,Api会默认返回一个提示语,不过在这里验证的话,可以自定义个性的提示语。
//对DOM进行CSS操作
jQuery('.status').removeClass('success');
jQuery('.status').addClass('open error');
//返回false,终止表单提交
return false;
}
//验证邮箱格式,电话号码等。通过正则方式来验证访客输入的邮箱或者电话号码是否符合规范,返回提示。
if ( parm['home_contact_mail'] != '' ) {
var reg = /^w+((-w+)|(.w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$/;
if( !reg.test( parm['home_contact_mail'] ) ) {
jQuery('.status .text').text('您的邮箱格式不对,请检查。');
jQuery('.status').removeClass('success');
jQuery('.status').addClass('open error');
return false;
}
}
//验证留言内容长度
var ConLength = 15; //定义内容至少输入的字符数量
//对留言内容长度和至少输入的字符数量进行比较
if( parm['content'].length < ConLength ){
var MoreLength = ConLength - parm['content'].length; //计算当前内容长度和至少输入的字符数量的差
jQuery('.status .text').text('您想要说的就这么多吗?请再写 ' + MoreLength + ' 个字吧。'); //个性化提示访客还需要输入多少字符
jQuery('.status').removeClass('success');
jQuery('.status').addClass('open error');
return false;
}
//验证两次留言的时间间隔,在时间间隔内不允许多次提交
//(1)、首先在Ajax留言成功的时候获取时间
var Time = Date.parse(new Date())/1000;
//(2)、将留言时间写入浏览器本地存储
localStorage.setItem('home_contact_time', Time);
//(3)、在进行Ajax提交之前获取button点击时的时间,并于浏览器本地存储的时间进行比较
var Interval = 60; //设置两次留言的时间间隔,单位:秒
var LastTime = localStorage.getItem('home_contact_time'); //获取上次留言时间
var CurrentTime = Date.parse(new Date())/1000; //获取当前时间
if( LastTime && ( CurrentTime - LastTime ) < Interval ){ //比较言时间
var NextTime = Interval - ( CurrentTime - LastTime ); //获取需要N秒后才可以留言
jQuery('.status .text').text('您的留言太频繁了,请您休息' + NextTime + '秒后再进行操作。');
jQuery('.status').removeClass('success');
jQuery('.status').addClass('open error');
return false;
}
效果展示
# 营销推广时间与预算
# 在上面
# 网站首页排名SEO搜索优化
# 贝词网seo
# 百度seo排名公司搜行者SEO
# 东莞网站建设一薇
# 阿信seo短视频企业
# 江门网络营销推广更优惠
# 新北区网站建设优化
# 聊城抖音搜索seo排名
# 网站排名优化琱zhousi39宙斯
# 会使
# 新的seo网站优化排名 排名
# 融水实用的网站建设推广
# 优化网站排名服务
# 顺义双语网站建设
# seo职员工作内容
# 小红书营销推广条件分析
# 政府网站建设人员组成
# 江门seo报告
# 网站开发与建设教案
# 微推广营销部
# 跳转
# PbootCMS教程
# PbootCms
# 表单
# 您的
# 访客
# 为空
# 两次
# 请输入
# 留言内容
# 自定义
# 用PbootCms的API接口制作Ajax无刷新留言
# 您想
# 在这里
# 会有
# 这么多
# 请您
# 其他的
# 所需
# 比较好
# 还需要
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化91478 】
【
技术知识72672 】
【
云计算0 】
【
GEO优化84317 】
【
优选文章0 】
【
营销推广36048 】
【
网络运营41350 】
【
案例网站102563 】
【
AI智能45237 】
相关推荐:
织梦cms后台提示common.inc.php文件属性为644问题解决方法_织梦CMS教程
常州自助建站费用包含哪些项目?
织梦dedecms后台邮件服务器明文密码修改为*星号显示的暗密码_织梦CMS教程
织梦实现列表页双样式和列表样式循环交替变化方法_织梦CMS教程
建站之星模板与系统推荐:一站式智能建站解决方案
如何在阿里云通过域名搭建网站?
如何选择建站程序?包含哪些必备功能与类型?
建站之星安装失败:服务器环境不兼容?
建站之星服务器配置流程详解与快速搭建操作指南
建站之星插件安装步骤与主题应用配置指南详解
如何快速搭建安全的FTP站点?
阿里云提示织梦后台文件media_add.php任意上传漏洞解决办法 _织梦CMS教程
定制建站哪家更专业可靠?推荐榜单揭晓
如何配置IIS站点权限与局域网访问?
黑客如何利用漏洞与弱口令入侵网站服务器?
如何快速生成专业多端适配建站电话?
dedecms织梦文章按年月日进行归档_织梦CMS教程
建站之星配置系统详解与新手快速建站指南
织梦dedecms让文章页关键词自动SEO内链_织梦CMS教程
如何正确选择百度移动适配建站域名?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
建站之星上传入口如何快速找到?
dedecms织梦列表页单独调用总页数二次开发方法_织梦CMS教程
浅谈织梦cms模板中标签中的一些SEO细节_SEO优化教程
dedecms织梦uploadsafe.inc.php上传漏洞解决方法_织梦CMS教程
如何在宝塔面板创建新站点?
如何用景安虚拟主机手机版绑定域名建站?
如何续费美橙建站之星域名及服务?
如何在景安云服务器上绑定域名并配置虚拟主机?
dedecms织梦文章列表页随机放入广告的方法_织梦CMS教程
如何通过VPS建站实现广告与增值服务盈利?
阿里云提示织梦dedecms支付模块漏洞解决办法_织梦CMS教程
织梦dedecms使用阿里大鱼短信接口进行短信发送_织梦CMS教程
dedecms织梦自带采集插件详细图文教程_织梦CMS教程
如何选择服务器才能高效搭建专属网站?
帝国CMS6.0会员中心模板下载_帝国CMS教程
wdcp面板nginx服务器如何把二级目录301重定向到二级域名_织梦CMS教程
如何通过远程VPS快速搭建个人网站?
高端云建站费用究竟需要多少预算?
建站之星模板快速切换与风格调整操作指南
如何通过商城免费建站系统源码自定义网站主题?
建站之星如何通过成品分离优化网站效率?
魔方云NAT建站如何实现端口转发?
如何自定义建站之星网站的导航菜单样式?
建站之星|视频|教程如何快速提升网站排名?
建站之星安装路径如何正确选择及配置?
建站之星自适应模板:一站式自定义设计,高效打造专业网站
建站哪里好?优选平台推荐与关键词优化指南
建站之星配置系统全解析:快速搭建与模板选择技巧指南
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
2022-04-03
南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。