问题描述
我在连接丢失时重新连接 websocket,因此脚本每 3 秒迭代一次并调用 StartWebsocket 函数直到连接。这很好用,但是...
连接恢复后如果我提交一次FORM,它会多次调用WEBSOCKET.SEND(实际上是调用StartWebsocket函数来恢复连接的次数)。每次执行 WEBSOCKET.SEND 时,日志控制台都会出现错误:“websocket is NULL”。当然它是 NULL,因为我将它设置为 NULL,但是 为什么会为所有以前的 NULL websocket 触发 SEND?
似乎 SEND 尝试了之前尝试打开的所有 websockets...即使它们是 NULL-ed。它们被缓存了吗? websocket 对象的实例没有被破坏?或者是怎么回事?..
这是代码(您需要 websocket 服务器来检查它,因为只有在连接 RESTORE 后才会出现症状)。
<html>
<head>
<script language="javascript" src="libs/jquery-1.9.1.js"></script>
<script>
$(document).ready(function(){
function StartWebsocket() {
var websocket = new WebSocket("ws://192.168.1.100:8080/socket.php");
setTimeout( function() { if (websocket.readyState == 1) { alert ('CONNECTED'); }},1000);
websocket.onopen = function(event) {
alert ('Open');
};
websocket.onmessage = function(event) {
alert ('Message');
};
websocket.onerror = function(event){
alert ('Error');
};
websocket.onclose = function(event){
//alert (websocket.readyState + ' ' + WebSocket[0] + ' ' + WebSocket.length);
websocket.onopen = null; delete websocket.onopen;
websocket.onerror = null; delete websocket.onerror;
websocket.onclose = null; delete websocket.onclose;
websocket.onmessage = null; delete websocket.onmessage;
websocket = null; delete websocket;
//alert (websocket.readyState + ' ' + WebSocket[0] + ' ' + WebSocket.length);
setTimeout(StartWebsocket,3000);
};
$('#form').on("submit",function(event){
event.preventDefault();
setTimeout(function(){
websocket.send('');
},100);
}); //FORM SUBMIT
} //StartWebsocket
StartWebsocket();
}); // FUNCTION DOCUMENT READY
</script>
</head>
<body>
<form name='form' id='form'>
<input type='text' name='message' id=message' placeholder='Message' required />
<input type='submit' id='Send' name='send' value='Send' >
</form>
</body>
</html>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)