问在asp.net ajax中客户端调用服务器端方法出现的问题

时间:2022-12-02 10:36:45
我用的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太狠了现在登陆不给分了

20 个解决方案

#1


谢谢大家的帮忙,我会非常感激地

#2


怎么没有人啊,我自己顶起来

#3


再顶

#4


谢谢帮帮我,我也就40分了,留20分下次用,csdn太狠了现在登陆不给分了

等你拿出另外20分就有答案了...

#5


哈哈,以上是玩笑...

#6


你先检查一下你的存储过程是否调用过了,再确定是程序问题还是程序没有执行的问题;

#7


ajax的调试确实是一个问题,没什么好的办法;

#8


注意 'username' 的值

#9


怎么检查阿,设断点在调用存储过程那,关闭窗口他不走哪里
我只晓得alert弹出来了,那客户端的logout方法调用了,那服务器端的logout方法也应该调用了,怎么会不执行存储过程了??
其他的调用储存过程方法都是可以的,就这个好像跟没有执行一样,那个标志1没有变成0
老板也是,我用application写了个聊天的,非要什么无刷新,我又没有搞过ajax
只好研究了那么几天,半看半写的写了这个,现在其他什么功能都还好,就这个关闭窗口没有用,用户不减少,存储过程好像没有调用

#10


楼主检查一下这语句是否调 用:
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

#12


hdt(倦怠) 
注意 '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到底是什么??/

#15


LS的,关键我打了断点,关闭窗口的时候只有alert起效果。
断点不能到程序就结束了。我用response.write打出来过,UserName就是我当前用户名

#16


我再顶一下,请大家帮忙看一下

#17


怎么没有人拉顶

#18


先试下不要放在onbeforeunload里,在其他试试

#19


刚才又发现一个问题
function logout()
  {
  
   ChatRoom.Logout();
   alert("aaaaaaa");
  } 
  
把alert放服务器方法后面,那关闭窗口就不弹出alert里面的内容了
如果放在前面就会弹出内容

#20


try 
var o = ChatRoom.Logout();

#1


谢谢大家的帮忙,我会非常感激地

#2


怎么没有人啊,我自己顶起来

#3


再顶

#4


谢谢帮帮我,我也就40分了,留20分下次用,csdn太狠了现在登陆不给分了

等你拿出另外20分就有答案了...

#5


哈哈,以上是玩笑...

#6


你先检查一下你的存储过程是否调用过了,再确定是程序问题还是程序没有执行的问题;

#7


ajax的调试确实是一个问题,没什么好的办法;

#8


注意 'username' 的值

#9


怎么检查阿,设断点在调用存储过程那,关闭窗口他不走哪里
我只晓得alert弹出来了,那客户端的logout方法调用了,那服务器端的logout方法也应该调用了,怎么会不执行存储过程了??
其他的调用储存过程方法都是可以的,就这个好像跟没有执行一样,那个标志1没有变成0
老板也是,我用application写了个聊天的,非要什么无刷新,我又没有搞过ajax
只好研究了那么几天,半看半写的写了这个,现在其他什么功能都还好,就这个关闭窗口没有用,用户不减少,存储过程好像没有调用

#10


楼主检查一下这语句是否调 用:
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

#12


hdt(倦怠) 
注意 '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到底是什么??/

#15


LS的,关键我打了断点,关闭窗口的时候只有alert起效果。
断点不能到程序就结束了。我用response.write打出来过,UserName就是我当前用户名

#16


我再顶一下,请大家帮忙看一下

#17


怎么没有人拉顶

#18


先试下不要放在onbeforeunload里,在其他试试

#19


刚才又发现一个问题
function logout()
  {
  
   ChatRoom.Logout();
   alert("aaaaaaa");
  } 
  
把alert放服务器方法后面,那关闭窗口就不弹出alert里面的内容了
如果放在前面就会弹出内容

#20


try 
var o = ChatRoom.Logout();

#21