A-A+
ecshop顶部实现AJAX登陆退出
ajax无刷新技术对于站点的体验度非常好,现在的站点基本上都使用了 ajax 的无刷新,这一节我们来看一下如何使用 ajax 来对 ecshop 网站顶部登录与登出实现无刷新,ecshop 本身提供的模板是不支持无刷新的,每一次的登陆跳出都要刷新页面才行,给人的体验很不好,下面夏日博客就把 ecshop 顶部实现无刷新的效果代码分享一下。
找到 themes/xiariboke/library/member_info.lbi,将登陆登出的代码替换成如下的代码即可:
<!--{if $user_info}--> <div class="lef_tit_bj">会员登陆</div> <div class="left_conn_bj"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="50" align="center" valign="middle"><label><strong>Hello {$user_info.username}</strong></label></td> </tr> <tr> <td height="30" align="center" valign="middle"><strong>欢迎光临本店</strong></td> </tr> <tr> <td height="40" align="center" valign="bottom"><label> <a href="user.php?act=logout"> <img src="../images/tuichu.gif"></a> <a href="user.php"> <img src="../images/jinrultan.gif"></a> </label></td> </tr> </table> </div> </div> <!--{else}--> <div class="lef_tit_bj">会员登录</div> <div class="left_conn_bj"> <form id="ECS_LOGINFORM" name="ECS_LOGINFORM" method="post" action="javascript:signIn()"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="50" align="right" valign="middle">用户名:</td> <td height="50" align="left" valign="middle"><label> <input type="text" name="username" class="yonhu_input" style="height:15px;"/> </label></td> </tr> <tr> <td height="30" align="right" valign="middle"> 密 码:</td> <td height="30" align="left" valign="middle"><input type="password" name="password" class="yonhu_input" style="height:15px;" /></td> </tr> <tr> <td height="40" colspan="2" align="center" valign="bottom"><label> <input type="image" name="imageField" src="images/denglu_bann.jpg" /> <a href="user.php?act=register"><img src="images/zhuce_bann.jpg" border="0" /></a> </label></td> </tr> </table> </form> </div> </div> <!--{/if}--> {literal} <script type="text/javascript"> function signIn() { var frm = document.forms['ECS_LOGINFORM']; if (frm) { var username = frm.elements['username'].value; var password = frm.elements['password'].value; var captcha = ''; if (frm.elements['captcha']) { captcha = frm.elements['captcha'].value; } if (username.length == 0 || password.length == 0) { {/literal} alert("{$lang.empty_username_password}"); {literal} return; } else { Ajax.call('user.php?act=signin', 'username=' + username + '&password=' + encodeURIComponent(password) + '&captcha=' + captcha, signinResponse, "POST", "TEXT"); } } else { alert('Template error!'); } } function signinResponse(result) { var userName = document.forms['ECS_LOGINFORM'].elements['username'].value; var mzone = document.getElementById("ECS_MEMBERZONE"); var res = result.parseJSON(); if (res.error > 0) { alert(res.content); if(res.html) { mzone.innerHTML = res.html; document.forms['ECS_LOGINFORM'].elements['username'].value = userName; } } else { if (mzone) { mzone.innerHTML = res.content; evalscript(res.ucdata); //alert(res.ucdata); } else { window.location.reload() } } } </script> {/literal}
另外还需要注意一点:ecshop 中经常会出现 js 冲突的问题,如果 js 冲突的问题已经解决并引用了jquery.json.js 的话,需要将其中的 var res = result.parseJSON(); 要改成:var res = $.evalJSON(result);