php web程序设计与ajax技术(PHP使用反向Ajax技术实现在线客服系统)PHP教程 / PHP与Ajax...

wufei123 发布于 2024-06-27 阅读(7)

文章来自:CSDN链接:https://blog.csdn.net/baochao95作者:webbc商务合作:请加微信(QQ):2230304070

资源教程分享

码农网-技术教程资源分享平台:http://www.mano100.cn这是一个资源教程分享网,网站收集了php视频教程,前端各种视频教程,接口API,微信公众号,支付宝视频教程,还有go语言,python等视频教程,教程以链接+提取码的方式分享与大家!。

用公众号每天来阅读文章,学习,目前是最方便的这是自闲暇的时间里,利用5分钟读读技术文章,丰富自己的知识当然,学习有很多种方法,不单单是基于公众号来学习,你可以到网上查找更多的教程,学习文档,技术书本,视频教程!各有各的爱好吧!。

视频教程推荐码农网:http://www.mano100.cn ,升级VIP会员组更划算VIP会员组,永久会员直接查看链接1 升级为月费会员:58RMB , 不可查看优质资源版块,其他的版块可查阅,有效期30天

2 升级为年费会员:108RMB , 全站的视频教程都可查看,有效期365天3 升级为永久会员:158RMB , 全站的视频教程都可查看,有效期永久

VIP用户组充值:http://www.mano100.cn/rjyfk_url-url.html注意:PC端操作更加方便!

文章正文

反向Ajax技术,又称为服务器推技术,server push等一般用于“在线客服”、“消息推送”、“即时通信”等功能中,比如新浪微博的私信功能,就是客户端不断的请求服务器并创建连接,去查看服务器有没有返回的信息,建立连接比较浪费服务器资源,下面我将根据客户端创建连接的不同性来介绍一下实现反向Ajax的三种思路。

三种思路:1、间隔固定时间创建连接这种方式就是按照固定时间不断的去请求服务器,当创建第一个连接时,不管是否有数据返回,此次连接都会失效,然后隔一段时间发出第二个请求,不断重复此动作,此法最浪费资源。

2、长连接方式这种方式始终只创建一个连接,而这个连接不断开,被称为长时连接,以此不断获取服务器推送的数据,这种方式只创建一个连接,比第一种方法较好。

3、长连接+长轮询方式这种方式始终创建连接,而这个连接也是长时连接,但是如果获得服务器推送的数据,此连接断开,然后隔固定时间创建第二此连接,这种方式最好,新浪微博的私信功能用的就是这种方法。

在线客服系统实现思路:(1)咨询用户端发出问题,把问题存入数据库,把咨询内容显示到客服人员的聊天窗口中 (2)客服人员看到聊天窗口后,选择咨询用户,进行回复,然后把回复内容显示到客服人员窗口中实现方法:

此系统我采用上述思想中的第二种和第三种方式共同实现,咨询用户端采用第三种方式实现,客服人员端采用第二种方式实现数据库信息:mid:主键,pos表示发送人,rec表示接收人,isread表示是否已读,content表示咨询/回复内容。

项目结构图:

客服人员界面(16-kefu-amdin.php):此处采用长连接页面中主要有一个div,用于显示聊天信息,还有一个隐藏的iframe标签,这个iframe实现反向Ajax模型,用于发送长时连接,当服务器有数据时,服务器将调用comet()方法,此方法显示咨询内容,choose()方法是选择咨询人,resp()是回复方法,在这里会向16-kefu-sendmsg.php页面发出ajax请求,向数据库插入一条回复信息,回复成功后并显示到聊天窗口中。

content="IE=edge">客服功能——客服人员端var xhr = new XMLHttpRequest();

//服务器调用函数functioncomet(json){var content = 

\);"> + json.pos + 说:+json.content+

;var old = document.getElementById(chatArea).innerHTML;

document.getElementById(chatArea).innerHTML = old + content;  }//咨询人选择函数functionchoose(pos){document.getElementById(

postman).innerHTML = pos;  }//客服人员回复函数functionresp(){var respContent = document.getElementById(respContent

).value;var pos = document.getElementById(postman).innerHTML;if(respContent ==  || pos == ){      alert(

请重新选择回复人或填写回复内容);return;    }//ajax提交请求    xhr.open(POST,16-kefu-sendmsg.php,true);    xhr.setRequestHeader(

Content-Type,application/x-www-form-urlencoded);    xhr.onreadystatechange = function (){if(this.readyState == 

4 && this.status == 200){if(this.responseText == ok){//回复成功,把回复信息显示到聊天界面中var content = 你回复

+ pos + :+respContent+

;var old = document.getElementById(chatArea).innerHTML;document.getElementById(

chatArea).innerHTML = old + content;document.getElementById(respContent).value = ;//给回复内容重新置空        }

      }    }var sendData = rec= + pos + &content=+respContent;    xhr.send(sendData);  }  

>#chatArea{width:500px;height:400px;border:1px solid black;overflow: scroll;  }<

h1>客服功能——客服人员端

原理:iframe+长连接

="0"name="frame"src="./16-kefu-iframe.php">

咨询人:

="respContent">

发送咨询/回复消息(16-kefu-sendmsg.php)

主要是接受信息,把数据写入到数据库中

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻11884