ajax聊天

ajax实现聊天功能:

代码:

window.onload = function() {

    function id(id) {
        return document.getElementById(id);
    }

    //验证用户名
    id(‘username1‘).onkeyup = function() {
            var url = ‘/5-22ajax/guestbook/index.php‘;
            var data = ‘m=index&a=verifyUserName&username=‘ + id(‘username1‘).value;
            ajax(‘get‘, url, data, function(str) {
                //            console.log(str);
                var js = JSON.parse(str);
                //            console.log(js);
                id(‘verifyUserNameMsg‘).innerHTML = js.message;
                if(js.code) {
                    id(‘verifyUserNameMsg‘).style.color = "red";
                } else {
                    id(‘verifyUserNameMsg‘).style.color = "green";

                }
            })
        }

    id(‘btnReg‘).onclick = function() {

        var url = ‘/5-22ajax/guestbook/index.php‘;
        var data = ‘m=index&a=reg&username=‘ + id(‘username1‘).value + ‘&password=‘ + id(‘password1‘).value;
        ajax(‘post‘, url, data, function(str) {
            //            console.log(str);
            var regStr = JSON.parse(str);
            console.log(regStr);
            if(regStr.code) {
                alert(regStr.message);
            } else {
                alert(regStr.message);
            }
        })
    }

    id(‘btnLogin‘).onclick = function() {
            var url = ‘/5-22ajax/guestbook/index.php‘;
            var data = ‘m=index&a=login&username=‘ + id(‘username2‘).value + ‘&password=‘ + id(‘password2‘).value;
            ajax(‘post‘, url, data, function(str) {
                //            console.log(str);
                var loginStr = JSON.parse(str);
                //            console.log(loginStr);

                //            }
                alert(loginStr.message);
            })
        }
        //改变登录状态

    //查看cookie值
    function getCookie(key) {
        var arr1 = document.cookie.split(‘;‘);
        for(var i = 0; i < arr1.length; i++) {
            var arr2 = arr1[i].split(‘=‘); //=号分割
            if(arr2[0] == key) {
                return arr2[1];
            }
        }
    }
    //function getCookie(key){
    //    return document.cookie;
    //}

    //    function getUsernameCookie(key) {
    //        var arr2 = document.cookie.split(‘;‘)[1].split(‘=‘)[1];
    //        return(arr2);
    //    }
    //    var usn = getUsernameCookie(‘username‘);
    //var usn=‘lannister‘;

    function updateStatus() {
        var uid = getCookie(‘uid‘);
        var reg = document.getElementById(‘reg‘);
        var login = document.getElementById(‘login‘);
        var user = document.getElementById(‘user‘);
        var userInfo = document.getElementById(‘userinfo‘);

        //        if(uid) {
        //            reg.style.display = ‘none‘;
        //            login.style.display = ‘none‘;
        //            user.style.display = ‘block‘;
        //            userInfo.innerHTML = usn;
        //            alert(‘yes‘);
        //        } else {
        //            reg.style.display = ‘block‘;
        //            login.style.display = ‘block‘;
        //            user.style.display = ‘none‘;
        //            alert(‘no‘);
        //        }

    }
    updateStatus();

    id(‘logout‘).onclick = function() {
        //        alert(‘success‘);
        var url = ‘/5-22ajax/guestbook/index.php‘;
        var data = ‘m=index&a=logout‘;
        ajax(‘post‘, url, data, function(str) {
            var arr = JSON.parse(str);
            alert(arr.message);
        })

    }

    function createList(str) {
        //            console.log(str);
        var contentStr = JSON.parse(str);
                    console.log(contentStr);

        var oDl = document.createElement(‘dl‘);
        var oDt = document.createElement(‘dd‘);
        var oStrong = document.createElement(‘strong‘);
        var oList = document.createElement(‘div‘);
        oList.id = ‘list‘;

        oStrong.innerHTML = contentStr.data.username + ‘  说: ‘;
        oDt.appendChild(oStrong);
        var oDd1 = document.createElement(‘dd‘);
        oDd1.innerHTML = contentStr.data.content;
        var oDd2 = document.createElement("dd");
        oDd2.className = ‘t‘;

        var a1 = document.createElement(‘a‘);
        var a2 = document.createElement(‘a‘);
        a1.innerHTML = ‘点赞(<span>‘ + contentStr.data.support + ‘)</span>‘;
        a2.innerHTML = ‘反对(<span>‘ + contentStr.data.oppose + ‘)</span>‘;
        oDd2.appendChild(a1);
        oDd2.appendChild(a2);
        oDd1.appendChild(oDd2);

        oList.appendChild(oDt);

        oList.appendChild(oDd1);
        id(‘myList‘).appendChild(oList);

    }

    function createAl(str) {
        var oDl = document.createElement(‘dl‘);
        var oDt = document.createElement(‘dd‘);
        var oStrong = document.createElement(‘strong‘);
        var oList = document.createElement(‘div‘);
        oList.id = ‘list‘;

        oStrong.innerHTML = str.username + ‘  说: ‘;
        oDt.appendChild(oStrong);
        var oDd1 = document.createElement(‘dd‘);
        oDd1.innerHTML = str.content;
        var oDd2 = document.createElement("dd");
        oDd2.className = ‘t‘;

        var a1 = document.createElement(‘a‘);
        var a2 = document.createElement(‘a‘);
        a1.innerHTML = ‘点赞(<span class="like">‘ + str.support + ‘)</span>‘;
        a2.innerHTML = ‘反对(<span class="against">‘ + str.oppose + ‘)</span>‘;
        oDd2.appendChild(a1);
        oDd2.appendChild(a2);
        oDd1.appendChild(oDd2);

        oList.appendChild(oDt);

        oList.appendChild(oDd1);
        id(‘myList‘).appendChild(oList);

    }

    id(‘btnPost‘).onclick = function() {
        var url = ‘/5-22ajax/guestbook/index.php‘;
        var data = ‘m=index&a=send&content=‘ + id(‘content‘).value;
//        console.log(id(‘content‘).value);
        ajax(‘post‘, url, data,createList);
    }

    //初始化留言列表
    function showList() {
        var url = ‘/5-22ajax/guestbook/index.php‘;
        var data = ‘m=index&a=getList&page=1&n=2‘;
        ajax(‘post‘, url, data, function(str) {
            var showArr = JSON.parse(str);
                        console.log(showArr);
            var list = showArr.data.list;
//                        console.log(list[1]);
            //            var list1=list[1];
            //            createAl(list1);
            for(var i = 0; i < list.length; i++) {
                createAl(list[i]);
            }
        })
    }
    showList();

    function like() {
        var url = ‘/5-22ajax/guestbook/index.php‘;
        var data = ‘m=index&a=doSupport&cid=1‘;
        id(‘likeFirst‘).onclick = function() {
            ajax(‘post‘, url, data, function(str) {
                var arr = JSON.parse(str);
//                console.log(arr);
                alert(arr.message);
            })
        }

    }
    like();

}

ajax.js:

function ajax(method, url, data, success) {
    var xhr = null;
    try {
        xhr = new XMLHttpRequest();
    } catch (e) {
        xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘);
    }

    if (method == ‘get‘ && data) {
        url += ‘?‘ + data;
    }

    xhr.open(method,url,true);
    if (method == ‘get‘) {
        xhr.send();
    } else {
        xhr.setRequestHeader(‘content-type‘, ‘application/x-www-form-urlencoded‘);
        xhr.send(data);
    }

    xhr.onreadystatechange = function() {

        if ( xhr.readyState == 4 ) {
            if ( xhr.status == 200 ) {
                success && success(xhr.responseText);
            } else {
                alert(‘出错了,Err:‘ + xhr.status);
            }
        }

    }
}

接口:

<?php
/**
 * @ controller Index.class.php
 *
 */

defined(‘IN_APP‘) or exit(‘Denied Access!‘);

class IndexController extends Controller {

    public function index() {
        echo ‘<p>欢迎</p>‘;
        //$result = $this->db->get("select * from users", 1);
        //dump($result);
    }

    /**
     * @ interface 用户名验证
     */
    public function verifyUserName() {

        $username = trim(isset($_REQUEST[‘username‘]) ? $_REQUEST[‘username‘] : ‘‘);

        switch ($this->_verifyUserName($username)) {
            case 0:
                $this->sendByAjax(array(‘message‘=>‘恭喜你,该用户名可以注册!‘));
                break;
            case 1:
                $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘用户名长度不能小于3个或大于16个字符!‘));
                break;
            case 2:
                $this->sendByAjax(array(‘code‘=>2,‘message‘=>‘对不起,该用户名已经被注册了!‘));
                break;
            default:
                break;
        }

    }

    /**
     * @ interface 用户注册
     */
    public function reg() {
        $username = trim(isset($_REQUEST[‘username‘]) ? $_REQUEST[‘username‘] : ‘‘);
        $password = trim(isset($_REQUEST[‘password‘]) ? $_REQUEST[‘password‘] : ‘‘);
        $avatar = trim(isset($_REQUEST[‘avatar‘]) && in_array($_REQUEST[‘avatar‘], array(1,2,3,4,5,6,7,8,9)) ? intval($_REQUEST[‘avatar‘]) : 1);

        if ($this->_verifyUserName($username) !== 0 || strlen($password)<3 || strlen($password) > 20) {
            $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘注册失败!‘));
        }
        $password = md5($password);
        if (false === $this->db->query("INSERT INTO `users` (`username`, `password`, `avatar`) VALUES (‘{$username}‘, ‘{$password}‘, {$avatar})")) {
            $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘注册失败!‘));
        } else {
            $this->sendByAjax(array(‘message‘=>‘注册成功!‘));
        }
    }

    /**
     * @ 用户登陆
     */
    public function login() {
        $username = trim(isset($_REQUEST[‘username‘]) ? $_REQUEST[‘username‘] : ‘‘);
        $password = trim(isset($_REQUEST[‘password‘]) ? $_REQUEST[‘password‘] : ‘‘);

        if (isset($_COOKIE[‘uid‘])) {
            $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘你已经登陆过了!‘));
        }

        if ($rs = $this->db->get("SELECT * FROM `users` WHERE `username`=‘{$username}‘")) {
            if ($rs[‘password‘] != md5($password)) {
                $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘登陆失败!‘));
            } else {
                setcookie(‘uid‘, $rs[‘uid‘], time() + 3600*60, ‘/‘);
                setcookie(‘username‘, $rs[‘username‘], time() + 3600*60, ‘/‘);
                $this->sendByAjax(array(‘code‘=>0,‘message‘=>‘登陆成功!‘));
            }
        } else {
            $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘登陆失败!‘));
        }
    }

    /**
     * @ 用户退出
     */
    public function logout() {
        if (!isset($_COOKIE[‘uid‘])) {
            $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘你还没有登陆!‘));
        } else {
            setcookie(‘uid‘, 0, time() - 3600*60, ‘/‘);
            $this->sendByAjax(array(‘code‘=>0,‘message‘=>‘退出成功!‘));
        }
    }

    /**
     * 用户留言保存
     */
    public function send() {
        if (!isset($_COOKIE[‘uid‘])) {
            $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘你还没有登陆!‘));
        } else {
            $content = trim(isset($_POST[‘content‘]) ? $_POST[‘content‘] : ‘‘);
            if (empty($content)) {
                $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘留言内容不能为空!‘));
            }
            $dateline = time();
            $this->db->query("INSERT INTO `contents` (`uid`, `content`, `dateline`) VALUES ({$_COOKIE[‘uid‘]}, ‘{$content}‘, {$dateline})");
            $returnData = array(
                ‘cid‘        =>    $this->db->getInsertId(),
                ‘uid‘        =>    $_COOKIE[‘uid‘],
                ‘username‘    =>    $_COOKIE[‘username‘],
                ‘content‘    =>    $content,
                ‘dateline‘    =>    $dateline,
                ‘support‘    =>    0,
                ‘oppose‘    =>    0,
            );
            $this->sendByAjax(array(‘code‘=>0,‘message‘=>‘留言成功!‘,‘data‘=>$returnData));
        }
    }

    /**
     * @ 顶
     */
    public function doSupport() {
        if (!isset($_COOKIE[‘uid‘])) {
            $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘你还没有登陆!‘));
        } else {
            $cid = isset($_REQUEST[‘cid‘]) ? intval($_REQUEST[‘cid‘]) : 0;
            if (!$cid) $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘无效留言cid!‘));
            $content = $this->db->get("SELECT cid FROM `contents` WHERE `cid`={$cid}");
            if (!$content) $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘不存在的留言cid!‘));
            $this->db->query("UPDATE `contents` SET `support`=support+1 WHERE `cid`={$cid}");
            $this->sendByAjax(array(‘code‘=>0,‘message‘=>‘顶成功!‘));
        }
    }

    /**
     * @ 踩
     */
    public function doOppose() {
        if (!isset($_COOKIE[‘uid‘])) {
            $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘你还没有登陆!‘));
        } else {
            $cid = isset($_REQUEST[‘cid‘]) ? intval($_REQUEST[‘cid‘]) : 0;
            if (!$cid) $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘无效留言cid!‘));
            $content = $this->db->get("SELECT cid FROM `contents` WHERE `cid`={$cid}");
            if (!$content) $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘不存在的留言cid!‘));
            $this->db->query("UPDATE `contents` SET `oppose`=oppose+1 WHERE `cid`={$cid}");
            $this->sendByAjax(array(‘code‘=>0,‘message‘=>‘踩成功!‘));
        }
    }

    /**
     * @ 获取留言列表
     */
    public function getList() {
        $page = isset($_REQUEST[‘page‘]) ? intval($_REQUEST[‘page‘]) : 1;    //当前页数
        $n = isset($_REQUEST[‘n‘]) ? intval($_REQUEST[‘n‘]) : 10;    //每页显示条数
        //获取总记录数
        $result_count = $this->db->get("SELECT count(‘cid‘) as count FROM `contents`");
        $count = $result_count[‘count‘] ? (int) $result_count[‘count‘] : 0;
        if (!$count) {
            $this->sendByAjax(array(‘code‘=>1,‘message‘=>‘还没有任何留言!‘));
        }
        $pages = ceil($count / $n);
        if ($page > $pages) {
            $this->sendByAjax(array(‘code‘=>2,‘message‘=>‘没有数据了!‘));
        }
        $start = ( $page - 1 ) * $n;
        $result = $this->db->select("SELECT c.cid,c.uid,u.username,c.content,c.dateline,c.support,c.oppose FROM `contents` as c, `users` as u WHERE u.uid=c.uid ORDER BY c.cid DESC LIMIT {$start},{$n}");
        $data = array(
            ‘count‘    =>    $count,
            ‘pages‘    =>    $pages,
            ‘page‘    =>    $page,
            ‘n‘        =>    $n,
            ‘list‘    =>    $result
        );
        $this->sendByAjax(array(‘code‘=>0,‘message‘=>‘‘,‘data‘=>$data));
    }

    /**
     * @ 用户名验证
     */
    private function _verifyUserName($username=‘‘) {
        if (strlen($username) < 3 || strlen($username) > 16) {
            return 1;
        }
        $rs = $this->db->get("SELECT `username` FROM `users` WHERE `username`=‘{$username}‘");
        if ($rs) return 2;
        return 0;
    }
}
时间: 2025-01-01 04:08:25

ajax聊天的相关文章

Ajax PHP JavaScript MySQL实现简易的无刷新在线聊天室

思路 消息显示区 发消息 板块 消息显示 消息发送 优化 显示非重复性的数据 优化显示 加上滚动条 每次都显示最新消息 完整代码 前端代码 数据库表结构 服务器端代码 总结与展望 总结 展望 为更好的运用这两天学到的Ajax的相关的知识,就做了个简单的在线网络聊天室. 思路 实现聊天室,基本上就是通过Ajax来传递数据,让PHP来实现对数据的差入和查找,再交给前端JavaScript实现页面的更新,达到即时聊天的功能. 消息显示区 消息显示区就是一个DIV块,我们会借助Ajax获取到服务器端信息

jQuery与Ajax的应用

Ajax的全称:Asynchronous JavaScript and XML (异步Javascript和XML) 传统模式中,数据提交通过表单方式实现,数据的获取是靠全页面刷新来重新获取整页的内容.而Ajax模式只是通过XMLHttpRequest对象向服务器端提交数据,即按需发送.因为Ajax需要与Web服务器端进行交互,所以用个服务器,我这里用的是Tomcat.  1. 传统Js的Ajax操作 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0

老赵AJAX培训

老赵AJAX培训AJAX培训第一讲:AJAX基础http://blog.zhaojie.me/2006/12/ajax-lesson-03.htmlAJAX培训第二讲:使用AJAX框架(上)  http://blog.zhaojie.me/2006/11/ajax-lesson-02-1.htmlAJAX培训第三讲:开发一个简单的AJAX聊天室http://blog.zhaojie.me/2006/12/ajax-lesson-03.html

AJAX 的操作和调用

AJAX(异步数据处理): Asynchronous (异步)的JavaScript  And  XML ( 局部刷新技术 ) ajax能做什么: 页面实现的效果是局部刷新,这种效果都是ajax操作的 用户名在线监测,搜索提示等等 无刷新分页,滚动分页加载,微博异步数据发布 ajax聊天室 ajax优点: 速度快:ajax引擎缓存了重复提交的数据 体验好 减少了服务器和数据库的读写压力 ajax数据处理流程: 服务器端:  PHP+MYSQL+EMAIL(.net,java....)    m=

锋利的JQuery学习笔记之JQuery

今天终于看到了最令我兴奋的一章:JQuery与Ajax的应用.AJAX即"Asynchronous JavaScript and XML"(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式应用的网页开发技术.在最初学习Ajax的日子里,我被ASP.NET AJAX框架提供的UpdatePanel迷惑了,以后Ajax就这么简单,所以在最初做的几个项目里,前台代码里必至少有一个UpdatePanel区域,把要

tornado—web框架基础入门

一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关有用工具及优化. Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快.得利于其非阻塞的方式和对 epoll 的 运用,Tornado 每秒可以处理数

Python(九)Tornado web 框架 其实很简单、深度应用

一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关有用工具及优化. Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快.得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以

Python----Tornado web框架

一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关有用工具及优化. Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快.得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以

tornado 框架2

转自  http://sebug.net/paper/books/tornado/ Overview FriendFeed使用了一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器.其应用程序使用的 Web 框架看起来有些像 web.py 或者 Google 的 webapp, 不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化. Tornado 就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本.Tornado 和