我用的ajaxpro框架
客户端有一个调用服务器端的方法如下
//退出聊天室
function logout()
{
// alert( "aaaaaaa ");
ChatRoom.Logout();
}
在body里写了onbeforeunload= "logout "调用logout方法,其中alert是为了测试是否调用写的
服务器端的ChatRoom.Logout()方法如下,调用存储过程
[AjaxPro.AjaxMethod]
public void Logout()
{
SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings[ "ConnectionString "]);
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "UserLogout ";
cmd.Parameters.Add( "@username ", UserName);conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
其中UserLogout为存储过程,作用当用户离开把用户标志从1设成0,表示不在线。发布离开公告,具体如下
--UserLogout将指定用户的isonline字段值设为0和发布用户离开聊天室的公告.
create procedure UserLogout
@username varchar(50)
as
update userinfo set isonline=0,lastchatinfo=(select isnull(max(id),0) from chatinfo) where username=@username
--发布公告
insert into chatinfo (user_from,user_to,content,expression,color,ispublic,sendtime) values( ' ', ' ', '[聊天公告]: '+@username+ '已经离开xxx ', ' ',
'ff0000 ',1,getdate())
现在问题是每次我关闭一个用户的窗口,另外一个用户的窗口不发布公告,用户列表也不更新,查了下数据库,关闭用户的状态也没有变为0,直接导致我用户列表不能改变,请教大家是怎么回事啊,测试了下关闭窗口前调用了alert,那应该调用logout()函数了,怎么会没有执行存储过程了?
谢谢帮帮我,我也就40分了,留20分下次用,csdn太狠了现在登陆不给分了
------解决方案--------------------------------------------------------
谢谢帮帮我,我也就40分了,留20分下次用,csdn太狠了现在登陆不给分了
等你拿出另外20分就有答案了...
------解决方案--------------------------------------------------------
哈哈,以上是玩笑...
------解决方案--------------------------------------------------------
你先检查一下你的存储过程是否调用过了,再确定是程序问题还是程序没有执行的问题;
------解决方案--------------------------------------------------------
ajax的调试确实是一个问题,没什么好的办法;
------解决方案--------------------------------------------------------
注意 'username ' 的值
------解决方案--------------------------------------------------------
楼主检查一下这语句是否调 用:
update userinfo set isonline=0,lastchatinfo=(select isnull(max(id),0) from chatinfo) where username=@username
------解决方案--------------------------------------------------------
先试下不要放在onbeforeunload里,在其他试试
------解决方案--------------------------------------------------------
try
var o = ChatRoom.Logout();