最近帮客户做网站的时候,基本都有遇到需要输入验证码留言的功能需求,如果直接submit提交表单,PC端还好,如果是手机端,特别是页面比较长,留言表在页面最底部的情况,如果用户提交信息错误然后返回提示之后,页面数据会清空,然后直接回到页面的顶端,这样非常影响用户体验
特别是对于好多客户做好网站,然后拿去做付费推广的情况,如果是这样做的留言表,会很影响访客留言的积极性,从而造成隐形经济损失,如果改成ajax提交的话,就能很好的解决这个问题,数据可以保留,信息提交错误的时候,返回提示信息,页面不会再直接跳回到顶部初始位置。
这里做一个记录,方便后面开发网站的时候,直接可以快速调用,节省开发时间,感兴趣的朋友可以做一定的参考
1、客户端ajax常规写法
$(function(){ $('.form_smt').click(function(e){ /* //复选框值的获取 moreinfo[0] = "-99"; $.each($('.form-moreinfo input:checkbox'),function(){ if(this.checked){ moreinfo[i] = $(this).val(); i++; } });*/ let obj={ 'type':$('select[name=type]').val(),//下拉框 'sex':$('input[name=sex]:checked').val(),//单选框 'name':$('input[name=name]').val(),//文本框 'content':$('textarea[name=textarea]').val(), //多行文本框 'mobile':$('input[name=telephone]').val(), 'verify':$('input[name=verify]').val(), } //元素存在才做验证 if($('input[name=tel]').length > 0){ if(obj.tel== ''){ alert('请输入电话号码!'); $('input[name=tel]').focus(); return false; } } //元素存在才做验证 — 单选框 if($('input[name=sex]').length > 0){ if(typeof(obj.sex) == 'undefined'){ alert('请选择性别!'); return false; } } if(obj.verify==''){ alert("请输入验证码"); return false; } if(obj.type==''){ alert("请选择许可证类型"); return false; } if(obj.name==''){ alert("请输入姓名"); return false; } if(!checkPhone(obj.mobile)){ alert("手机号码输入有误,请重新输入"); return false; } $.ajax({ type : "POST", //提交方式 url : "/index.php?m=formguide&c=index&a=show&formid=18&siteid=1",//路径 data : { "dosubmit":"dosubmit", "ajax":"1", //'info[moreinfo][]':moreinfo, 'info[type]':obj.type, 'info[name]':obj.name, 'info[telephone]':obj.mobile, 'verify':obj.verify, },//数据,这里使用的是Json格式进行传输 //dataType: "json", success : function(result) {//返回数据根据结果进行相应的处理 if(result == "ok"){ alert('您已提交成功,我们会马上安排人员和您联系!'); }else if(result == "codeerror"){ alert('验证码输入错误!'); } } }); e.stopPropagation();//禁止响应父元素的相关事件 e.preventDefault();//防止跳转 }) }) function checkPhone(phone){ if(!(/^1[3456789]\d{9}$/.test(phone))){ return false; }else{ return true; } }
2、服务器端改成如下的就行,/phpcms/modules/formguide/index.php的show()方法
if($_POST['ajax'] == 1){ if(isset($_POST['verify'])){ //启动session $session_storage = 'session_'.pc_base::load_config('system','session_storage'); pc_base::load_sys_class($session_storage); //验证码 if (($_SESSION['code'] != strtolower($_POST['verify'])) || empty($_SESSION['code'])) { echo "codeerror";exit; } else { $_SESSION['code'] = ''; } } }else{ if(isset($_POST['verify'])){ //启动session $session_storage = 'session_'.pc_base::load_config('system','session_storage'); pc_base::load_sys_class($session_storage); //验证码 if (($_SESSION['code'] != strtolower($_POST['verify'])) || empty($_SESSION['code'])) { showmessage("验证码错误"); } else { $_SESSION['code'] = ''; } } }
if($_POST['ajax'] == 1){
echo "ok";
}else{
showmessage("您已提交成功,我们会马上安排人员和您联系!", APP_PATH);
}
3、验证码的写法
<a href="javascript:;" title="点击刷新图片验证码">
{php pc_base::load_sys_class('form', '', 0);}
{form::checkcode('code_img')}
</a>
<style>#code_img{height:38px;width:98px;}</style>
最终效果:

感兴趣的朋友,可以下载下来作为参考