php 开发一个聊天系统,ajax+php 实现一个简单的在线聊天室功能(附带源码)

通过ajax和setInterval()函数,配合php+mysql实现一个简单的在线聊天室的功能。附带详细源码案例。这个聊天室是一个简单的聊天室,通过javascript setInterval()和ajax函数,不停的去获取服务器获取最新的聊天数据信息,并无刷新的写入到前台DOM中,来实现在线聊天的功能,这是一个比较笨的方法实现在线聊天室功能,不建议用于实际项目中。html代码:

实现一个简单的在线聊天室功能

在线聊天

.chats { width:100%;max-height:295px;min-height:200px; height:auto; overflow-y:auto; }

.chatbtn { width:100%; padding:10px 10px; border-top:1px dashed #000;}

.chats .chatlist { width:100%; padding:10px 10px; min-height:24px; line-height:1.2; font-size:13px; text-align:left; }

.chats .chatlist .chattit {  font-size:14px; }

.chats .chatlist .chattit span { margin-right:2px; }

.chats .chatlist .chatcon { font-size:13px; padding-left:10px; margin-top:6px;text-decoration: underline;}

发送

//js聊天代码

$(function(){

//获取聊天数据

setInterval(function(){

var star = $('#datachat').attr('data_num');

//判断是不是第一次加载,如果是第一次加载直接获取数据库最新的数据

//如果不是第一次加载,就不停的去获取服务器的最新聊天数据

if(star=='load'){

$.ajax({

url:'inc/chat.php?type=get_def',

type:'post',

cache:false,

dataType:'json',

success:function(data){

if(data !='error!'){

var clength = data.length-1;

for(var i=clength;i>=0;i--){

$(".chats").append("

"+data[i].name+""+data[i].addtime+"["+data[i].address+"]:
"+data[i].content+"
");

$('#datachat').attr('data_num',data[i].id);

$(".chats").animate({scrollTop:$('.chats')[0].scrollHeight},2000);

}

}

}

});

}else{

$.ajax({

url:'inc/chat.php?type=get_new',

type:'post',

cache:false,

dataType:'json',

data:{

'num':star

},

success:function(data){

if(data !='error!'){

var clength = data.length-1;

for(var i=clength;i>=0;i--){

$(".chats").append("

"+data[i].name+""+data[i].addtime+"["+data[i].address+"]:
"+data[i].content+"
");

$('#datachat').attr('data_num',data[i].id);

$(".chats").animate({scrollTop:$('.chats')[0].scrollHeight},700);

}

}

}

});

}

},1500);

//发送聊天数据

$('#chat_send').click(function(){

var chat_name = $('#name').val();

var chat_con = $('#con').val();

if(chat_name==''){

$('#name').val('昵称不可以为空!');

return false;

}else if(chat_name=='昵称不可以为空!'){

$('#name').val(' ');

return false;

}else if(chat_name.length<1){

$('#name').val('昵称太短!');

return false;

}else if(chat_name=='昵称太短!'){

$('#name').val(' ');

return false;

}

if(chat_con==''){

$('#con').val('内容不可以为空!');

return false;

}else if(chat_con=='内容不可以为空!'){

$('#con').val(' ');

return false;

}else if(chat_con.length<1){

$('#con').val('内容太短!');

return false;

}else if(chat_con=='内容太短!'){

$('#con').val(' ');

return false;

}

$.ajax({

url:'inc/chat.php?type=send',

type:'post',

cache:false,

dataType:'text',

data:{

'name':chat_name,

'con':chat_con

},

success:function(data){

if(data=='发送成功!'){

$('#chat_send').text('发送成功');

}else{

$('#chat_send').text('发送失败');

}

setTimeout(function(){

$('#chat_send').text('发送');

},1000);

},

error:function(){

alert('请求出错!');

}

});

});

});

php数据处理代码 chat.php:<?php

header("Conten-type:text/html;charset=utf-8");

require('../config.php');

require('getip.php');

if( $_SERVER['REQUEST_METHOD'] == "POST" ) {

if ($_GET['type'] == 'send') {

//添加聊天数据

$name = htmlspecialchars(addslashes(trim($_POST['name'])));

$con = htmlspecialchars(addslashes(trim($_POST['con'])));

if (empty($name) || empty($con)) {

echo "信息填写不完整。";

exit;

} else {

$ip = GetIpFrom();

$ips = $ip[0] .'-'. $ip[1];

if($dbh->exec("insert into chat (name,content,addtime,address) values('$name','$con',now(),'$ips')")>0){

echo '发送成功!';

exit;

}else{

echo '发送失败!';

exit;

}

}

}else if ($_GET['type'] == 'get_def'){

//获取数据

$res = $dbh->query("SELECT * FROM chat ORDER BY id DESC LIMIT 10");

$res = $res->fetchAll();

if($res){

echo json_encode($res);

exit;

}else{

echo 'error!';

exit;

}

}else if($_GET['type'] == 'get_new'){

$num = intval($_POST['num']);

$sql1 ="SELECT * FROM chat WHERE id>{$num} ORDER BY id DESC";

$res1 = $dbh -> query($sql1);

$res2 = $res1->fetchAll();

if($res2){

echo json_encode($res2);

exit;

}else{

echo 'error!';

exit;

}

}

}

?>mysql数据库结构:CREATE TABLE IF NOT EXISTS `chat` (

`id` int(8) NOT NULL AUTO_INCREMENT COMMENT 'id',

`name` char(10) NOT NULL COMMENT '昵称',

`content` varchar(255) NOT NULL COMMENT '内容',

`addtime` datetime NOT NULL COMMENT '发布时间',

`address` varchar(80) DEFAULT '未知' COMMENT 'ip地址',

PRIMARY KEY (`id`)

) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='在线聊天' AUTO_INCREMENT=3 ;

ajax+php简单聊天室源码下载:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么下载完整的python_怎么下载python并安装

Q5&#xff1a;如何在win7下安装Python及配置安装配置如下&#xff1a;下载安装 Pythonhttp://www.python.org/download/http://www.python.org/ftp/python/2.6/python-2.6.msihttp://www.python.org/ftp/python/2.6/python-2.6.amd64.msi如下载 Python 2.6&#xff0c;安装目录…

织梦 php 传值,php获取post参数的几种方式

php获取post参数的几种方式&#xff0c;ajax提交数据的几种类型&#xff0c;PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。1、$_POST[paramName] 只有在Content-Type为application/x-www-form-urlencoded或者为multipart/form-data的 时候&#x…

内网python 仓库_GitHub - xanarry/LanTrans-desktop: 这是一个用python写的局域网传文件工具, 跨平台, 仓库中还有安卓版的工程...

文档(代码比较乱)ubuntu效果windows效果主程序, Lantans_desktop.py 运行时所需环境&#xff1a; python3.4, PyQT5如果接收过程无法被扫描到, 请关闭防火墙接收文件使用:打开软件->选择 接受 ->选择保存路径->点击 等待接收, 然后等待局域网中的发送方即可.注意:如果…

php进度条如何计算,投票最后显示进度条的百分比怎么算

我自己写的一个投票结果显示&#xff0c;其中设定票数最多的那个进度条为100&#xff05;。public class voteresult : System.Web.UI.Page{protected System.Web.UI.HtmlControls.HtmlTableCell td_vote;protected System.Web.UI.HtmlControls.HtmlTable tab_result;private v…

函数的返回值可以不用赋值_C语言学习|函数的应用《一》

C语言为程序的结构提供了函数和模块一、函数的定义与使用《编程之道》中写道&#xff1a;“一个程序应该是灵活自由的、它的子过程就像串在一根线子上的珍珠。”子过程在C语言中被称为”函数“。程序的执行从主函数开始&#xff0c;往复、循环、迭代地调用一个又一个函数。函数…

java泛型和类型通配符,java – 泛型,类型参数和通配符

通用类型要了解的主要内容是它们不是协变的。所以你可以这样做&#xff1a;final String string "string";final Object object string;以下将不会编译&#xff1a;final List strings ...final List objects strings;这是为了避免您规避泛型类型的情况&#xff…

python学习指令_由Python到深度学习入门之常用命令

检查Anaconda是否成功安装&#xff1a;conda --version检测目前安装了哪些环境&#xff1a;conda info --envs检查目前有哪些版本的python可以安装&#xff1a;conda search --full-name python安装python 3.5版本(命令中的tensorflow是一个本地电脑的一个python环境名称不是te…

php的yii框架配置,php配置yii框架_PHP教程

个人爱好&#xff0c;研究了下php的yii框架。首先&#xff0c;研究yii框架的前提是下载php的一键安装和zend studio.. php的一键安装给出连接如下http://www.download3k.com/Install-XAMPP.html 。。。zend studion的链接如下http://www.zend.com/en/products/studio/downloads…

python box2d模拟平抛运动_论述如何基于Box2D模拟星球重力效果

作者&#xff1a;Emanuele Feronato随着《Angry Birds Space》的问世&#xff0c;我想你定非常疑惑要如何通过Box2D模拟星球重力。基本原理非常简单。首先&#xff0c;太空没有重力&#xff0c;所以你将通过如下方式创建没有重力的b2World世界&#xff1a;private var world:b2…

蚂蚁庄园 php源码,蚂蚁庄园五体投地

蚂蚁庄园五体投地&#xff0c;蚂蚁庄园小课堂的题目你答对了吗&#xff1f;今天题目有点难&#xff0c;大家可能不清楚&#xff0c;人们常常会对极其敬重的人五体投地&#xff0c;五体投地的五体指的是什么意思呢&#xff1f;“五体”又称“五轮”&#xff0c;指双肘、双膝和额…

python与javascript的区别_python与js区别有哪些

数据类型js和python都是动态语言&#xff0c;a 1; a abc&#xff0c;a这个变量是动态的&#xff0c;类型是随时可以被更改的。而在java中就是静态语言变量&#xff0c;int a 1&#xff1b;a abc 就会报错。基本命令1.输出js里面的console.log()、document.write()、window.…

fsk调制解调实验报告 matlab,基于MATLAB的-FSK调制与解调-通信原理实验

《基于MATLAB的-FSK调制与解调-通信原理实验》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《基于MATLAB的-FSK调制与解调-通信原理实验(2页珍藏版)》请在人人文库网上搜索。1、实验五 FSK调制与解调1实验目的和要求用MATLAB实现二进制序列的fsk调制与解调2实验内容用…

电脑端二维码识别工具_电脑端自签工具更新,多功能软件一键签名

因为苹果后台的调整&#xff0c;电脑端的自签工具 Cydia Impactor 一直无法使用&#xff0c;如今虽然没有等到大胡子对 Cydia Impactor 适配更新&#xff0c;却等到了全新的替代工具。先说下为什么 Cydia Impactor 为什么让那么多人惦记&#xff0c;虽然对于不越狱安装越狱工具…

python列表是顺序表还是链表_顺序表与链表

Python中的顺序表 Python中的list和tuple两种类型采用了顺序表的实现技术&#xff0c;具有前面讨论的顺序表的所有性质。 tuple是不可变类型&#xff0c;即不变的顺序表&#xff0c;因此不支持改变其内部状态的任何操作&#xff0c;而其他方面&#xff0c;则与list的性质类似。…

python只读模式可以打印嘛_只读python属性?无法打印对象

在Python中&#xff0c;使用自定义描述符可以很容易地做到这一点。在看看HOWTO中的Descriptor Example。如果您只需更改__get__方法来引发一个AttributeError就这样了。我们不妨将其重命名&#xff0c;去掉日志记录&#xff0c;使之更简单。在class WriteOnly(object):"&q…

php 查文件sha1 内存不足,SHA是否足以检查文件重复? (PHP中的sha1_file)

sha1_file足够好吗&#xff1f;使用sha1_file就足够了,碰撞的可能性非常小,但这种情况几乎不会发生.为了减少几乎0比较文件大小的几率&#xff1a;function is_duplicate_file( $file1,$file2){if(filesize($file1) ! filesize($file2)) return false;if( sha1_file($file1) s…

js for foreach 快慢_js基本搜索算法实现与170万条数据下的性能测试

前言今天让我们来继续聊一聊js算法&#xff0c;通过接下来的讲解&#xff0c;我们可以了解到搜索算法的基本实现以及各种实现方法的性能&#xff0c;进而发现for循环&#xff0c;forEach&#xff0c;While的性能差异&#xff0c;我们还会了解到如何通过web worker做算法分片&am…

python获取工作日_Python获取一段日期内的工作日和所有日期

Pandas1、获取工作日&#xff1a;bdate_rangeimport pandas as pde pd.bdate_range(8/7/2019, 8/31/2019)e.date #获取日期列表array([datetime.date(2019, 8, 7), datetime.date(2019, 8, 8),datetime.date(2019, 8, 9), datetime.date(2019, 8, 12),datetime.date(2019, 8, …

iterm php,iTerm2笔记

本文是 iTerm2 的使用笔记&#xff0c;不定期更新。1 注释说明对于 Preferences 的修改&#xff0c;> 表示需要切换选项卡&#xff0c;-> 表示在同一选项卡内2 参考3 杂301 如何随时随地一键调用 Quake-like iTerm2首先声明&#xff1a;由于 Mac OS 本身对窗体「最大化」…

python 正则表达式 sub_python 正则表达式 re.sub re.subn

python正则表达式模块简介Python 自1.5版本起增加了re 模块&#xff0c;它提供 Perl 风格的正则表达式模式。Python 1.5之前版本则是通过 regex 模块提供 Emacs 风格的模式。Emacs 风格模式可读性稍差些&#xff0c;而且功能也不强&#xff0c;因此编写新代码时尽量不要再使用 …