ajax+asp.net+mssql チャット ルームを更新しない
ajax+asp.net+mssql によって実装された Ajax 非更新チャット ルームは、HTML Web エディターをサポートします。ご参考までに。ただし、小さな問題があります。つまり、Firefox でショートカット キー Ctrl+Enter を使用して情報を送信する場合、送信関数が遅延して呼び出されないと、ff ダウンロード ダイアログ ボックスが表示され、奇妙な現象になります。
JScript codeif(e.ctrlKey&&e.keyCode==13){
e.preventDefault();
e.stopPropagation();
setTimeout("Showbo.Chat.send()",50);//ff でアラート プロンプトをすぐに使用すると、ダウンロード ツールがポップアップしますが、これは奇妙です。
false を返します;}
}、間違い);
処理を高速化するために、ストアド プロシージャが使用されます。
ASP版とPHP版については以下の記事をご覧ください。
ajax+asp+mssql チャット ルームを更新しない
ajax+php+mssql 更新なしチャット ルーム
別の動的ページを使用するには、lib.js ファイル内の RequstUrl 変数の値を変更するだけです。
完全なサンプルのダウンロード
効果は以下の通りです
コンテンツの長さには制限があるため、すべてのコードを掲載することはできません。すべてのコードを確認するには、サンプルをダウンロードするか、次の記事を参照してください。
ajax+asp.net+mssql チャット ルームを更新しない
C# のメインコードは以下に掲載されています。他のバージョンについては、上のリンクを確認してください。
ajax.cs
システムを使用した C# コード。
System.Web を使用します。
System.Data を使用します。
System.Configuration を使用します。
System.Data.SqlClient を使用します。
パブリッククラスAjax
{
プライベート静的ブール IsNull(string v)
{
if (v == null || v.Trim() == "") true を返します。
それ以外の場合は false を返します。
}
プライベート静的文字列 Js(string v)
{
return v.Replace("'", "'");
}
パブリック静的文字列 Login()
{
HttpRequest リクエスト = HttpContext.Current.Request;
文字列 rStr = "";
文字列ユーザー名 = Request.Form["nn"];
if (IsNull(ユーザー名))
{
rStr = "success:false,err:'ニックネームを空にすることはできません!'";
}
else if (UserName.Length > 20)
{
rStr = "success:false,err:'ニックネームは 20 文字を超えることはできません!'";
}
それ以外
{
文字列ユーザー ID = ""、キー = "";
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
試す
{
SqlCommand cm = new SqlCommand("ajaxLogin", cn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add(new SqlParameter("@UserName", SqlDbType.NVarChar, 50));
cm.Parameters["@UserName"].Value = ユーザー名;
//==========出力パラメータ
cm.Parameters.Add(new SqlParameter("@UserId", SqlDbType.NVarChar, 18));
cm.Parameters["@UserId"].Direction = ParameterDirection.Output;
cm.Parameters.Add(new SqlParameter("@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:'エラーが発生しました。後でもう一度お試しください!'";
else if (UserId == "0") rStr = @"success:false,err:'このユーザーのニックネームはすでに存在します。ニックネームを変更してください!'";
else rStr += "success:true,UserId:'" + UserId + "',Key:'" + Key + "'";
cm.Dispose();
}
catch (例外 e)
{
rStr = @"success:false,err:'reason n" + Js(e.Message) + "'";
}
cn.Close();
}
rStr を返します。
}
パブリック静的文字列 Logout()
{
HttpRequest リクエスト = HttpContext.Current.Request;
文字列 rStr = ""、UserId = Request.Form["uid"]、Key = Request.Form["key"];
if (IsNull(UserId) || IsNull(Key)) return "success:false,err:'ユーザー情報が失われました!'";
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
試す
{
SqlCommand cm = new SqlCommand("ajaxLogout", cn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add(new SqlParameter("@UserId", SqlDbType.NVarChar, 18));
cm.Parameters["@UserId"].Value = ユーザー ID;
cm.Parameters.Add(new SqlParameter("@UserKey", SqlDbType.NVarChar, 5));
cm.Parameters["@UserKey"].Value = キー;
cm.Parameters.Add(new SqlParameter("@Result", SqlDbType.Int));
cm.Parameters["@Result"].Direction = ParameterDirection.Output;
cm.ExecuteNonQuery();
if(cm.Parameters["@UserId"].Value.ToString().Trim()=="0")rStr = "success:false,err:'ユーザー情報が存在しません!'";
それ以外の場合、rStr="成功: true";
cm.Dispose();
}
catch (例外 e)
{
}
cn.Close();
rStr を返します。
}
パブリック静的文字列 Say()
{
HttpRequest リクエスト = HttpContext.Current.Request;
文字列 From = 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:'情報の転送が不完全です!'";
それ以外
{
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
試す
{
SqlCommand cm = new SqlCommand("ajaxSay", cn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add(new SqlParameter("@UserKey", SqlDbType.NVarChar, 5));
cm.Parameters["@UserKey"].Value = キー;
cm.Parameters.Add(new SqlParameter("@From", SqlDbType.NVarChar, 18));
cm.Parameters["@From"].Value = から;
cm.Parameters.Add(new SqlParameter("@To", SqlDbType.NVarChar, 18));
cm.Parameters["@To"].Value = To;
cm.Parameters.Add(new SqlParameter("@Msg", SqlDbType.NVarChar, 800));
cm.Parameters["@Msg"].Value = Msg;
cm.Parameters.Add(new SqlParameter("@Result", SqlDbType.Int));
cm.Parameters["@Result"].Direction = ParameterDirection.Output;
cm.ExecuteNonQuery();
if (cm.Parameters["@Result"].Value.ToString() == "0") rStr = "sucess:false,err:'公開に失敗しました! 理由: 受信者はもう存在しません!'";
それ以外の場合、rStr = "成功: true";
cm.Dispose();
}
catch (例外 e)
{
rStr = "sucess:false,err:'公開に失敗しました! 理由 n" + Js(e.Message) + "'";
}
cn.Close();
}
rStr を返します。
}
パブリック静的文字列 ReadUser()
{
HttpRequest リクエスト = HttpContext.Current.Request;
文字列 rStr = ""、UserId = Request.Form["uid"];
if (IsNull(UserId)) rStr += "success:false,err:'ユーザー ID が失われています!'";
それ以外
{
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
試す
{
SqlCommand cm = new SqlCommand("ajaxReadUser", cn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add(new SqlParameter("@UserId", SqlDbType.NVarChar, 18));
cm.Parameters["@UserId"].Value = ユーザー ID;
文字列 j = "";
SqlDataReader dr = 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 (例外 e)
{
rStr = @"success:false,err:'次のエラーが発生しました n" + Js(e.Message) + "'";
}
cn.Close();
}
rStr を返します。
}
パブリック静的文字列 Read()
{
HttpRequest リクエスト = HttpContext.Current.Request;
文字列 rStr = "";
文字列 UserId = Request.Form["uid"]、Key = Request.Form["key"];
if (IsNull(UserId) || IsNull(Key)) rStr = "success:false,err:'ユーザー情報が失われました!'";
それ以外
{
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
試す
{
SqlCommand cm = new SqlCommand("ajaxRead", cn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add(new SqlParameter("@UserId", SqlDbType.NVarChar, 18));
cm.Parameters["@UserId"].Value = ユーザー ID;
cm.Parameters.Add(new SqlParameter("@UserKey", SqlDbType.NVarChar, 5));
cm.Parameters["@UserKey"].Value = キー;
SqlDataReader dr = cm.ExecuteReader();
文字列 j = "";
while (dr.Read()) j += ",'" + Js(dr[0].ToString()) + "'";
dr.Close();
cm.Dispose();
rStr = "success:true,data:[" + (j == "" ? "" : j.Substring(1)) + "]";
}
catch (例外 e)
{
rStr = "success:false,err:'次のエラーが発生しました" + Js(e.Message) + "'";
}
cn.Close();
}
rStr を返します。
}