php使用ob函数将传统注册登录页面过渡到ajax方式
ajax实现登录验证不仅提高了用户体验,还能够降低服务器的带宽,减小网络延迟。然而很多老站点仍然采用传统的跳转方式来实现登录和注册,像discuz部分页面不适合使用ajax方式。这时网站开发人员往往需要维护2套不同的注册登录代码,其区别只是代码输出部分:传统页面输出一段包含javascript的html代码,而ajax仅仅输出一段字符串或json。
试想:假如有这样一种机制(守门人),可以对代码的输出内容进行监测,然后根据传统注册的html输出内容进行替换为ajax输出内容,这样代码的复用率可以极大提高。
这样的功能是存在的,PHP中就有这样的守门人可以对即将输出的字符进行函数替换:
bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
当然也可以使用
string ob_get_contents ( void )
将输出控制缓冲中的字符读入到一个变量中,然后你可以进行字符串内容替换。
案例:
检测验证码是否正确的函数在connect.php的ecmsCheckShowKey()中,其使用printerror()输出内容。
//开始捕获输出到回调函数中 ob_start("ajax_callback"); //逻辑部分,直接调用即可,不用理会输出 $code = isset($_POST['code']) ? RepPostStr($_POST['code']) : ''; ecmsCheckShowKey($keyvname, $code, 1); //尾部关闭缓冲区,后面不要再写输出内容的代码了 ob_end_flush(); //这里是输出内容的识别与替换函数,$buffer其实是echo输出的字符串 function ajax_callback($buffer) { //从ob缓存查找指定字符并替换为ajax消息 if(strpos($buffer, '验证码不正确') !== false) { return "2"; } }
这样,只需给旧的PHP代码加上一层输出检测代码,即可完成到ajax过渡。
教程地址:http://blog.zhengshuiguang.com/php/ob-ajax.html
欢迎转载!但请带上文章地址^^
评论已关闭