Ajax+asp.net+mssql无刷新聊天室
ajax+asp.net+mssql实现的ajax无刷新聊天室,支持htmlweb编辑器。供大家参考下。不过有个小问题,就是Firefox下如果使用快捷键ctrl+enter发送信息时,如果不延时调用发送函数,会弹出ff的下载对话框,奇怪。
JScriptcodeif(e.ctrlKey&&e.keyCode==13){
e.PReventDefault();
e.stopPropagation();
setTimeout("Showbo.Chat.send()",50);//在ff中马上使用alert提示时尽然弹出下载工具,奇怪.
returnfalse;}
},false);
为了加快速度,使用了存储过程。
asp及php版本请看下面的文章
ajax+asp+mssql无刷新聊天室
ajax+php+mssql无刷新聊天室
要使用不同的动态页面,只需要更改lib.js文件中RequstUrl变量的值即可。
内容长度限制,所以就不贴出所有的代码了,要看全部代码请下载示例或者查看下面这篇文章
ajax+asp.net+mssql无刷新聊天室
下面贴出C#的主要的代码,其他版本请查看上面的链接
ajax.cs
C#codeusingSystem;
usingSystem.Web;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Data.SqlClient;
publicclassAjax
{
privatestaticboolIsNull(stringv)
{
if(v==null||v.Trim()=="")returntrue;
elsereturnfalse;
}
privatestaticstringJs(stringv)
{
returnv.Replace("''","''");
}
publicstaticstringLogin()
{
HttpRequestRequest=HttpContext.Current.Request;
stringrStr="";
stringUserName=Request.Form["nn"];
if(IsNull(UserName))
{
rStr="success:false,err:''昵称不能为空!''";
}
elseif(UserName.Length>20)
{
rStr="success:false,err:''昵称不能超过20个字符!''";
}
else
{
stringUserId="",Key="";
SqlConnectioncn=newSqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
try
{
SqlCommandcm=newSqlCommand("ajaxLogin",cn);
cm.CommandType=CommandType.StoredProcedure;
cm.Parameters.Add(newSqlParameter("@UserName",SqlDbType.NVarChar,50));
cm.Parameters["@UserName"].Value=UserName;
//==========输出参数
cm.Parameters.Add(newSqlParameter("@UserId",SqlDbType.NVarChar,18));
cm.Parameters["@UserId"].Direction=ParameterDirection.Output;
cm.Parameters.Add(newSqlParameter("@UserKey",SqlDbType.NVarChar,5));
cm.Parameters["@UserKey"].Direction=ParameterDirection.Output;
cm.ExecuteNonQuery();
UserId=cm.Parameters["@UserId"].Value.ToString().Trim();
Key=cm.Parameters["@UserKey"].Value.ToString().Trim();
if(UserId=="-1")rStr=@"success:false,err:''发生错误,请稍后再试!''";
elseif(UserId=="0")rStr=@"success:false,err:''已经存在此用户昵称,请修改您的昵称!''";
elserStr+="success:true,UserId:''"+UserId+"'',Key:''"+Key+"''";
cm.Dispose();
}
catch(Exceptione)
{
rStr=@"success:false,err:''原因n"+Js(e.Message)+"''";
}
cn.Close();
}
returnrStr;
}
publicstaticstringLogout()
{
HttpRequestRequest=HttpContext.Current.Request;
stringrStr="",UserId=Request.Form["uid"],Key=Request.Form["key"];
if(IsNull(UserId)||IsNull(Key))return"success:false,err:''用户信息丢失!''";
SqlConnectioncn=newSqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
try
{
SqlCommandcm=newSqlCommand("ajaxLogout",cn);
cm.CommandType=CommandType.StoredProcedure;
cm.Parameters.Add(newSqlParameter("@UserId",SqlDbType.NVarChar,18));
cm.Parameters["@UserId"].www.wang027.comValue=UserId;
cm.Parameters.Add(newSqlParameter("@UserKey",SqlDbType.NVarChar,5));
cm.Parameters["@UserKey"].Value=Key;
cm.Parameters.Add(newSqlParameter("@Result",SqlDbType.Int));
cm.Parameters["@Result"].Direction=ParameterDirection.Output;
cm.ExecuteNonQuery();
if(cm.Parameters["@UserId"].Value.ToString().Trim()=="0")rStr="success:false,err:''用户信息不存在!''";
elserStr="success:true";
cm.Dispose();
}
catch(Exceptione)
{
}
cn.Close();
returnrStr;
}
publicstaticstringSay()
{
HttpRequestRequest=HttpContext.Current.Request;
stringFrom=Request.Form["from"],To=Request.Form["to"]
,Key=Request.Form["key"],Msg=Request.Form["ct"],rStr="";
if(IsNull(From)||IsNull(Key)||IsNull(To)||IsNull(Msg))rStr="success:false,err:''信息传递不完整!''";
else
{
SqlConnectioncn=newSqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
try
{
SqlCommandcm=newSqlCommand("ajaxSay",cn);
cm.CommandType=CommandType.StoredProcedure;
cm.Parameters.Add(newSqlParameter("@UserKey",SqlDbType.NVarChar,5));
cm.Parameters["@UserKey"].Value=Key;
cm.Parameters.Add(newSqlParameter("@From",SqlDbType.NVarChar,18));
cm.Parameters["@From"].Value=From;
cm.Parameters.Add(newSqlParameter("@To",SqlDbType.NVarChar,18));
cm.Parameters["@To"].Value=To;
cm.Parameters.Add(newSqlParameter("@Msg",SqlDbType.NVarChar,800));
cm.Parameters["@Msg"].Value=Msg;
cm.Parameters.Add(newSqlParameter("@Result",SqlDbType.Int));
cm.Parameters["@Result"].Direction=ParameterDirection.Output;
cm.ExecuteNonQuery();
if(cm.Parameters["@Result"].Value.ToString()=="0")rStr="sucess:false,err:''发表失败!n原因:接收者已经不存在!''";
elserStr="success:true";
cm.Dispose();
}
catch(Exceptione)
{
rStr="sucess:false,err:''发表失败!原因n"+Js(e.Message)+"''";
}
cn.Close();
}
returnrStr;
}
publicstaticstringReadUser()
{
HttpRequestRequest=HttpContext.Current.Request;
stringrStr="",UserId=Request.Form["uid"];
if(IsNull(UserId))rStr+="success:false,err:''用户id丢失!''";
else
{
SqlConnectioncn=newSqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
try
{
SqlCommandcm=newSqlCommand("ajaxReadUser",cn);
cm.CommandType=CommandType.StoredProcedure;
cm.Parameters.Add(newSqlParameter("@UserId",SqlDbType.NVarChar,18));
cm.Parameters["@UserId"].Value=UserId;
stringj="";
SqlDataReaderdr=cm.ExecuteReader();
while(dr.Read())j+=",{id:''"+dr[0]+"'',nn:''"+Js(dr[1].ToString())+"''}";
dr.Close();
cm.Dispose();
rStr="success:true,data:["+(j==""?"":j.Substring(1))+"]";
}
catch(Exceptione)
{
rStr=@"success:false,err:''发生如下错误n"+Js(e.Message)+"''";
}
cn.Close();
}
returnrStr;
}
publicstaticstringRead()
{
HttpRequestRequest=HttpContext.Current.Request;
stringrStr="";
stringUserId=Request.Form["uid"],Key=Request.Form["key"];
if(IsNull(UserId)||IsNull(Key))rStr="success:false,err:''用户信息丢失!''";
else
{
SqlConnectioncn=newSqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
try
{
SqlCommandcm=newSqlCommand("ajaxRead",cn);
cm.CommandType=CommandType.StoredProcedure;
cm.Parameters.Add(newSqlParameter("@UserId",SqlDbType.NVarChar,18));
cm.Parameters["@UserId"].Value=UserId;
cm.Parameters.Add(newSqlParameter("@UserKey",SqlDbType.NVarChar,5));
cm.Parameters["@UserKey"].Value=Key;
SqlDataReaderdr=cm.ExecuteReader();
stringj="";
while(dr.Read())j+=",''"+Js(dr[0].ToString())+"''";
dr.Close();
cm.Dispose();
rStr="success:true,data:["+(j==""?"":j.Substring(1))+"]";
}
catch(Exceptione)
{
rStr="success:false,err:''发生以下错误"+Js(e.Message)+"''";
}
cn.Close();
}
returnrStr;
}
|
|