NodeJS+Socket.io+Mongoose是否不兼容IE?(已解决)
发布于 11 年前 作者 tansy 9402 次浏览 最后一次编辑是 8 年前

刚刚完成一个NodeJS+Socket.io+Mongoose搭建聊天系统的小框架雏形。在ff和chrome浏览器演示正常。但是在IE下,发送一条数据的时候,会同时显示两条,并且保存到库中的数据也是两条。

Jquery获取输入数据

$('#startChat').bind('click',function(){
			var message = $('#senddata').val();
			var name = $('#n').html();
			var data ={'message':message,'name':name};
			sendChat(data);
});
function sendChat(data){
	socket.emit('sendChat',data);
}
 socket.on('sendChat',function(data){
    mongoAction.saveMessage(socket,data);

  });
function saveMessage (socket,data){
	var MainMessage = mongoose.model('MainMessage',messageSchema,'MainMessage');
	var newMessage = new MainMessage();
	newMessage.message = data.message;
	newMessage.nickname = data.name;
	newMessage.save(function (err,udata){
		if(udata){
			socket.emit('saveChat','ok',data);
			socket.broadcast.emit('saveChat','ok',data);
socket.on('saveChat',...)...
var p = document.createElement('p'); 
	p.innerHTML = '<font color="green ">'+data.name+'</font>:'+data.message;
	document.getElementById('output').appendChild(p); 

是代码哪里出了问题么? 有木有好人能帮我看一看,万分感谢

3 回复

啊。解决了,感谢某位大神

if (/Firefox\/\s/.test(navigator.userAgent)){
    var socket = io.connect('localhost:8124',{transports:['xhr-polling']}); 
} 
else if (/MSIE (\d+.\d+);/.test(navigator.userAgent)){
    var socket = io.connect('localhost:8124',{transports:['jsonp-polling']}); 
} 
else { 
    var socket = io.connect('localhost:8124'); 
}

话说socket.io不是可以自动调节transports吗?

我也不是特别明白,就是用了上边的替代之后,ie莫名就好了。之前有人告诉我要用flash才能保证兼容IE。一知半解。仍需学习

回到顶部