日期:2014-05-19  浏览次数:20408 次

问在asp.net ajax中客户端调用服务器端方法出现的问题
我用的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();