客户端有一个调用服务器端的方法如下
//退出聊天室
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太狠了现在登陆不给分了
20 个解决方案
#1
谢谢大家的帮忙,我会非常感激地
#2
怎么没有人啊,我自己顶起来
#3
再顶
#4
谢谢帮帮我,我也就40分了,留20分下次用,csdn太狠了现在登陆不给分了
等你拿出另外20分就有答案了...
等你拿出另外20分就有答案了...
#5
哈哈,以上是玩笑...
#6
你先检查一下你的存储过程是否调用过了,再确定是程序问题还是程序没有执行的问题;
#7
ajax的调试确实是一个问题,没什么好的办法;
#8
注意 'username' 的值
#9
怎么检查阿,设断点在调用存储过程那,关闭窗口他不走哪里
我只晓得alert弹出来了,那客户端的logout方法调用了,那服务器端的logout方法也应该调用了,怎么会不执行存储过程了??
其他的调用储存过程方法都是可以的,就这个好像跟没有执行一样,那个标志1没有变成0
老板也是,我用application写了个聊天的,非要什么无刷新,我又没有搞过ajax
只好研究了那么几天,半看半写的写了这个,现在其他什么功能都还好,就这个关闭窗口没有用,用户不减少,存储过程好像没有调用
我只晓得alert弹出来了,那客户端的logout方法调用了,那服务器端的logout方法也应该调用了,怎么会不执行存储过程了??
其他的调用储存过程方法都是可以的,就这个好像跟没有执行一样,那个标志1没有变成0
老板也是,我用application写了个聊天的,非要什么无刷新,我又没有搞过ajax
只好研究了那么几天,半看半写的写了这个,现在其他什么功能都还好,就这个关闭窗口没有用,用户不减少,存储过程好像没有调用
#10
楼主检查一下这语句是否调 用:
update userinfo set isonline=0,lastchatinfo=(select isnull(max(id),0) from chatinfo) where username=@username
update userinfo set isonline=0,lastchatinfo=(select isnull(max(id),0) from chatinfo) where username=@username
#11
jerrie_1()
楼主检查一下这语句是否调 用:
update userinfo set isonline=0,lastchatinfo=(select isnull(max(id),0) from chatinfo) where username=@username
-------------------------------------------------------
没有调用。
因为关闭窗口数据库的标志1还是标志1没有改成0
楼主检查一下这语句是否调 用:
update userinfo set isonline=0,lastchatinfo=(select isnull(max(id),0) from chatinfo) where username=@username
-------------------------------------------------------
没有调用。
因为关闭窗口数据库的标志1还是标志1没有改成0
#12
hdt(倦怠)
注意 'username' 的值
-----------------------
我username的值前面有好几个存储过程都调用了是对的
前面写了个属性
public string UserName
{
get
{
return User.Identity.Name;
}
}
注意 'username' 的值
-----------------------
我username的值前面有好几个存储过程都调用了是对的
前面写了个属性
public string UserName
{
get
{
return User.Identity.Name;
}
}
#13
会不会是这onbeforeunload的问题阿,但是alert是弹出来的,说明客户端方法在关闭窗口发生之前调用了,那既然调用了客户端方法,那客户端方法内调用的ajax服务器方法也应该调用,可怎么数据库就没有发生改变了?现在就这个疑问
#14
呵呵我没有试过在ajaxmethod中去user
楼主没用vs.net 吗
在
public void Logout()
{
SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
打个breakpoint
看看user到底是什么??/
楼主没用vs.net 吗
在
public void Logout()
{
SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
打个breakpoint
看看user到底是什么??/
#15
LS的,关键我打了断点,关闭窗口的时候只有alert起效果。
断点不能到程序就结束了。我用response.write打出来过,UserName就是我当前用户名
断点不能到程序就结束了。我用response.write打出来过,UserName就是我当前用户名
#16
我再顶一下,请大家帮忙看一下
#17
怎么没有人拉顶
#18
先试下不要放在onbeforeunload里,在其他试试
#19
刚才又发现一个问题
function logout()
{
ChatRoom.Logout();
alert("aaaaaaa");
}
把alert放服务器方法后面,那关闭窗口就不弹出alert里面的内容了
如果放在前面就会弹出内容
function logout()
{
ChatRoom.Logout();
alert("aaaaaaa");
}
把alert放服务器方法后面,那关闭窗口就不弹出alert里面的内容了
如果放在前面就会弹出内容
#20
try
var o = ChatRoom.Logout();
var o = ChatRoom.Logout();
#21
#1
谢谢大家的帮忙,我会非常感激地
#2
怎么没有人啊,我自己顶起来
#3
再顶
#4
谢谢帮帮我,我也就40分了,留20分下次用,csdn太狠了现在登陆不给分了
等你拿出另外20分就有答案了...
等你拿出另外20分就有答案了...
#5
哈哈,以上是玩笑...
#6
你先检查一下你的存储过程是否调用过了,再确定是程序问题还是程序没有执行的问题;
#7
ajax的调试确实是一个问题,没什么好的办法;
#8
注意 'username' 的值
#9
怎么检查阿,设断点在调用存储过程那,关闭窗口他不走哪里
我只晓得alert弹出来了,那客户端的logout方法调用了,那服务器端的logout方法也应该调用了,怎么会不执行存储过程了??
其他的调用储存过程方法都是可以的,就这个好像跟没有执行一样,那个标志1没有变成0
老板也是,我用application写了个聊天的,非要什么无刷新,我又没有搞过ajax
只好研究了那么几天,半看半写的写了这个,现在其他什么功能都还好,就这个关闭窗口没有用,用户不减少,存储过程好像没有调用
我只晓得alert弹出来了,那客户端的logout方法调用了,那服务器端的logout方法也应该调用了,怎么会不执行存储过程了??
其他的调用储存过程方法都是可以的,就这个好像跟没有执行一样,那个标志1没有变成0
老板也是,我用application写了个聊天的,非要什么无刷新,我又没有搞过ajax
只好研究了那么几天,半看半写的写了这个,现在其他什么功能都还好,就这个关闭窗口没有用,用户不减少,存储过程好像没有调用
#10
楼主检查一下这语句是否调 用:
update userinfo set isonline=0,lastchatinfo=(select isnull(max(id),0) from chatinfo) where username=@username
update userinfo set isonline=0,lastchatinfo=(select isnull(max(id),0) from chatinfo) where username=@username
#11
jerrie_1()
楼主检查一下这语句是否调 用:
update userinfo set isonline=0,lastchatinfo=(select isnull(max(id),0) from chatinfo) where username=@username
-------------------------------------------------------
没有调用。
因为关闭窗口数据库的标志1还是标志1没有改成0
楼主检查一下这语句是否调 用:
update userinfo set isonline=0,lastchatinfo=(select isnull(max(id),0) from chatinfo) where username=@username
-------------------------------------------------------
没有调用。
因为关闭窗口数据库的标志1还是标志1没有改成0
#12
hdt(倦怠)
注意 'username' 的值
-----------------------
我username的值前面有好几个存储过程都调用了是对的
前面写了个属性
public string UserName
{
get
{
return User.Identity.Name;
}
}
注意 'username' 的值
-----------------------
我username的值前面有好几个存储过程都调用了是对的
前面写了个属性
public string UserName
{
get
{
return User.Identity.Name;
}
}
#13
会不会是这onbeforeunload的问题阿,但是alert是弹出来的,说明客户端方法在关闭窗口发生之前调用了,那既然调用了客户端方法,那客户端方法内调用的ajax服务器方法也应该调用,可怎么数据库就没有发生改变了?现在就这个疑问
#14
呵呵我没有试过在ajaxmethod中去user
楼主没用vs.net 吗
在
public void Logout()
{
SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
打个breakpoint
看看user到底是什么??/
楼主没用vs.net 吗
在
public void Logout()
{
SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
打个breakpoint
看看user到底是什么??/
#15
LS的,关键我打了断点,关闭窗口的时候只有alert起效果。
断点不能到程序就结束了。我用response.write打出来过,UserName就是我当前用户名
断点不能到程序就结束了。我用response.write打出来过,UserName就是我当前用户名
#16
我再顶一下,请大家帮忙看一下
#17
怎么没有人拉顶
#18
先试下不要放在onbeforeunload里,在其他试试
#19
刚才又发现一个问题
function logout()
{
ChatRoom.Logout();
alert("aaaaaaa");
}
把alert放服务器方法后面,那关闭窗口就不弹出alert里面的内容了
如果放在前面就会弹出内容
function logout()
{
ChatRoom.Logout();
alert("aaaaaaa");
}
把alert放服务器方法后面,那关闭窗口就不弹出alert里面的内容了
如果放在前面就会弹出内容
#20
try
var o = ChatRoom.Logout();
var o = ChatRoom.Logout();