• 8735阅读
  • 0回复

[JavaScript] Web聊天室无刷新的方法 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-07-30
WEB聊天室的实现的关键,是关于如何从更新消息,常用的有刷新和无刷新两种,所谓刷新,就是由一个隐藏的Frame自动刷新网页,以获取消息,而无刷新,则是指,网页本身不刷新,但它仍然可以定时地从服务器上取得消息.本文就讲这种无刷新的实现.这里,依赖于JavaScript来完成定时向服务器发送请求以取得消息的功能.
首先,利用setInterval函数,以设置定时器的时间和触发函数.
再者,使用XMLHTTP对象来向服务器发送请求.如果是在IE下面,可以用ActiveXObject("Microsoft.XMLHTTP"),在Firefox下面,可以用XMLHttpRequest来获取.
   再下面,是我们要使用何种请求方式,一种是普通的请求方式,另一种是使用Webservice.让我们一个一个来说.如果使用普通的请求方式,只需要注意一个地方,那就是编码问题.就是因为在发送数据的时候,它会以UTF格式编码,我们在服务器端就要做些处理,以确保反馈回来的信息是格式正确的.而如果使用WebService方式,可以使用SOAP或者HTTP POST两种方式.这里我们选择HTTP POST方式,以取得和普通方式相同的处理过程.用Open方法打开所要请求的URL, 并选择请求方式(GET OR POSt or PUSH等等),可以用setRequestHeader设置一下发送的Header,并用send方法把BODY送出去.
用异步的方式,设定响应方法,在响应方法里处理接收到消息反馈后该如何处理.
代码如下:

<script language="javascript">
id=window.setInterval("getMessage()",5000);
var xmlhttp = null;//new ActiveXObject("Microsoft.XMLHTTP");
//if (navigator.appName == "Microsoft Internet Explorer")
try
{
if (window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}
else
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
catch (e)
{
alert("您的浏览器不支持XMLHTTP,请使用Mozilla系列浏览器或者下载IE XMLHTTP插件");
}
function getMessage()
{
var now = new Date();
var url = "getmsg.php?time=" + now.toString();
//var url = "http://xchinux.vicp.net/iis/test/test.asmx/HelloWorld";
xmlhttp.open("POST", url, true);
var varbody = "Message=string";
xmlhttp.setRequestHeader("Content-Length", varbody.length)
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");// 这个是WebService的时候用的
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4)
{
top.mainFrame.document.thisform.innerHTML += xmlhttp.responseText + "<br>";
}
}
// 回调函数必须在open之前注册,如果用的是Geoke的话.不过,IE不如此.
xmlhttp.send("Message=你好, 再来一个&iIndex=23");
}
</script>



但用JavaScript请求WebService,还有另一种专门的方法,不过,这种方法使用起来比较的困难,而且在Firefox下面似乎不大好使.代码如下;

<html>
<head>
<script language="JavaScript">
var iCallID;

function init()
{
service.useService("http://xchinux.vicp.net/iis/test/test.asmx?WSDL","test");
iCallID = service.test.callService("HelloWorld", null);
}

function onWSresult()
{
if((event.result.error)&&(iCallID==event.result.id))
{
var xfaultcode = event.result.errorDetail.code;
var xfaultstring = event.result.errorDetail.string;
var xfaultsoap = event.result.errorDetail.raw;
alert("error");
// Add code to output error information here
}
else
{
alert("The method returned the result : " + event.result.value);
}
}
</script>
</head>
<body onload="init()">
<div id="service" style="behavior:url('webservice.htc')" onresult="onWSresult()">
</div>
</body>
</html>
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个