Необновляемый чат Ajax, реализованный с помощью ajax+asp.net+mssql, поддерживает веб-редактор HTML. Для справки. Однако есть небольшая проблема, то есть при использовании сочетания клавиш ctrl+enter для отправки информации под Firefox, если функция отправки не вызывается с задержкой, всплывает диалоговое окно загрузки ff, что странно.
Код JScriptif(e.ctrlKey&&e.keyCode==13){
е.preventDefault();
е.stopPropagation();
setTimeout("Showbo.Chat.send()",50);//Когда в ff немедленно используется предупреждение, появляется инструмент загрузки, что странно.
вернуть ложь;}
},ЛОЖЬ);
Для ускорения работы используются хранимые процедуры.
Пожалуйста, ознакомьтесь со следующей статьей для версий asp и php.
ajax+asp+mssql не обновлять чат
ajax+php+mssql не обновлять чат
Чтобы использовать разные динамические страницы, просто измените значение переменной RequstUrl в файле lib.js.
Полная загрузка образца
Эффект следующий
Существует ограничение на длину контента, поэтому я не буду публиковать весь код. Чтобы увидеть весь код, скачайте пример или просмотрите следующую статью.
ajax+asp.net+mssql не обновлять чат
Основной код C# опубликован ниже. Для получения информации о других версиях перейдите по ссылке выше.
ajax.cs
Код C# с использованием системы;
использование System.Web;
использование System.Data;
использование System.Configuration;
использование System.Data.SqlClient;
общественный класс Аякс
{
частный статический bool IsNull (строка v)
{
if (v == null || v.Trim() == "") вернуть true;
иначе вернуть ложь;
}
частная статическая строка Js (строка v)
{
return v.Replace("'", "'");
}
общедоступная статическая строка Login()
{
Запрос HttpRequest = HttpContext.Current.Request;
строка rStr = "";
строка Имя пользователя = Request.Form["nn"];
если (IsNull(Имя пользователя))
{
rStr = "success:false,err:'Псевдоним не может быть пустым!";
}
иначе, если (ИмяПользователя.Длина> 20)
{
rStr = "success:false,err:'Псевдоним не может превышать 20 символов!";
}
еще
{
строка UserId = "", Key = "";
SqlConnection cn = новый SqlConnection(ConfigurationSettings.AppSettings["db"]);
сп.Открыть();
пытаться
{
SqlCommand cm = новый SqlCommand("ajaxLogin", cn);
cm.ТипКоманды = ТипКоманды.СохраненнаяПроцедура;
cm.Parameters.Add(new SqlParameter("@UserName", SqlDbType.NVarChar, 50));
cm.Parameters["@UserName"].Значение = Имя пользователя;
//==========Выходные параметры
cm.Parameters.Add(new SqlParameter("@UserId", SqlDbType.NVarChar, 18));
cm.Parameters["@UserId"].Направление = ПараметрНаправление.Вывод;
cm.Parameters.Add(new SqlParameter("@UserKey", SqlDbType.NVarChar, 5));
cm.Parameters["@UserKey"].Direction = ПараметрDirection.Output;
см.ExecuteNonQuery();
UserId = cm.Parameters["@UserId"].Value.ToString().Trim();
Ключ = 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 + "'";
см.Dispose();
}
поймать (Исключение e)
{
rStr = @"success:false,err:'reason n" + Js(e.Message) + "'";
}
сп.Закрыть();
}
вернуть рСтр;
}
общедоступная статическая строка Выход()
{
Запрос HttpRequest = HttpContext.Current.Request;
string rStr = "", UserId = Request.Form["uid"], Key = Request.Form["key"];
if (IsNull(UserId) || IsNull(Key)) return "success:false,err:'Информация пользователя потеряна!'";
SqlConnection cn = новый SqlConnection(ConfigurationSettings.AppSettings["db"]);
сп.Открыть();
пытаться
{
SqlCommand cm = новый SqlCommand("ajaxLogout", cn);
cm.ТипКоманды = ТипКоманды.СохраненнаяПроцедура;
cm.Parameters.Add(new SqlParameter("@UserId", SqlDbType.NVarChar, 18));
cm.Parameters["@UserId"].Значение = UserId;
cm.Parameters.Add(new SqlParameter("@UserKey", SqlDbType.NVarChar, 5));
cm.Parameters["@UserKey"].Значение = Ключ;
cm.Parameters.Add(new SqlParameter("@Result", SqlDbType.Int));
cm.Parameters["@Result"].Направление = ПараметрНаправление.Выход;
см.ExecuteNonQuery();
if(cm.Parameters["@UserId"].Value.ToString().Trim()=="0")rStr = "success:false,err:'Информация о пользователе не существует!'";
еще rStr="успех:истина";
см.Dispose();
}
поймать (Исключение e)
{
}
сп.Закрыть();
вернуть рСтр;
}
общедоступная статическая строка Say()
{
Запрос HttpRequest = HttpContext.Current.Request;
строка От = Запрос.Форма["из"], Кому = Запрос.Форма["в"]
, Key = Request.Form["key"], Msg = Request.Form["ct"], rStr = "";
if (IsNull(From) || IsNull(Key) || IsNull(To) || IsNull(Msg)) rStr = "success:false,err:'Неполная передача информации!'";
еще
{
SqlConnection cn = новый SqlConnection(ConfigurationSettings.AppSettings["db"]);
сп.Открыть();
пытаться
{
SqlCommand cm = новый SqlCommand("ajaxSay", cn);
cm.ТипКоманды = ТипКоманды.СохраненнаяПроцедура;
cm.Parameters.Add(new SqlParameter("@UserKey", SqlDbType.NVarChar, 5));
cm.Parameters["@UserKey"].Значение = Ключ;
cm.Parameters.Add(new SqlParameter("@From", SqlDbType.NVarChar, 18));
cm.Parameters["@From"].Значение = От;
cm.Parameters.Add(new SqlParameter("@To", SqlDbType.NVarChar, 18));
cm.Parameters["@To"].Значение = 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"].Направление = ПараметрНаправление.Выход;
см.ExecuteNonQuery();
if (cm.Parameters["@Result"].Value.ToString() == "0") rStr = "sucess:false,err:'Ошибка публикации! Причина: получатель больше не существует!'";
еще rStr = «успех: правда»;
см.Dispose();
}
поймать (Исключение e)
{
rStr = "sucess:false,err:'Ошибка публикации! Причина n" + Js(e.Message) + "'";
}
сп.Закрыть();
}
вернуть рСтр;
}
общедоступная статическая строка ReadUser()
{
Запрос HttpRequest = HttpContext.Current.Request;
строка rStr = "", UserId = Request.Form["uid"];
if (IsNull(UserId)) rStr += "success:false,err:'Идентификатор пользователя потерян!'";
еще
{
SqlConnection cn = новый SqlConnection(ConfigurationSettings.AppSettings["db"]);
сп.Открыть();
пытаться
{
SqlCommand cm = новый SqlCommand("ajaxReadUser", cn);
cm.ТипКоманды = ТипКоманды.СохраненнаяПроцедура;
cm.Parameters.Add(new SqlParameter("@UserId", SqlDbType.NVarChar, 18));
cm.Parameters["@UserId"].Значение = UserId;
строка j = "";
SqlDataReader dr = cm.ExecuteReader();
while (dr.Read()) j += ",{id:'" + dr[0] + "',nn:'" + Js(dr[1].ToString()) + "'}";
доктор.Закрыть();
см.Dispose();
rStr = "success:true,data:[" + (j == "" ? "" : j.Substring(1)) + "]";
}
поймать (Исключение e)
{
rStr = @"success:false,err:'Произошла следующая ошибка n" + Js(e.Message) + "'";
}
сп.Закрыть();
}
вернуть рСтр;
}
публичная статическая строка 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 = новый SqlConnection(ConfigurationSettings.AppSettings["db"]);
сп.Открыть();
пытаться
{
SqlCommand cm = новый SqlCommand("ajaxRead", cn);
cm.ТипКоманды = ТипКоманды.СохраненнаяПроцедура;
cm.Parameters.Add(new SqlParameter("@UserId", SqlDbType.NVarChar, 18));
cm.Parameters["@UserId"].Значение = UserId;
cm.Parameters.Add(new SqlParameter("@UserKey", SqlDbType.NVarChar, 5));
cm.Parameters["@UserKey"].Значение = Ключ;
SqlDataReader dr = cm.ExecuteReader();
строка j = "";
while (dr.Read()) j += ",'" + Js(dr[0].ToString()) + "'";
доктор.Закрыть();
см.Dispose();
rStr = "success:true,data:[" + (j == "" ? "" : j.Substring(1)) + "]";
}
поймать (Исключение e)
{
rStr = "success:false,err:'Произошла следующая ошибка" + Js(e.Message) + "'";
}
сп.Закрыть();
}
вернуть рСтр;
}