ajax+asp.net+mssql无刷新聊天室
为了加快速度,使用了存储过程。
asp及php版本请看下面的文章
ajax+asp+mssql无刷新聊天室
ajax+php+mssql无刷新聊天室
此例子也可以作为mssql存储过程使用的示例,如php调用mssql的存储过程,php获取mssql数据库的输出参数。
要使用不同的动态页面,只需要更改lib.js文件中RequstUrl变量的值即可。
完整示例下载
效果如下



ajax.cs
using System.Web;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
///
///操作类
///
public class Ajax
{
///
/// 检查字符串是否为空
///
/// 字符串
///
private static bool IsNull(string v)
{
if (v == null || v.Trim() == "") return true;
else return false;
}
///
/// 转义js字符串以便输出
///
/// 字符串
///
private static string Js(string v)
{
return v.Replace("'", "\\'");
}
///
/// 用户登录
///
///
public static string Login()
{
HttpRequest Request = HttpContext.Current.Request;
string rStr = "";
string UserName = Request.Form["nn"];
if (IsNull(UserName))
{
rStr = "success:false,err:'昵称不能为空!'";
}
else if (UserName.Length > 20)
{
rStr = "success:false,err:'昵称不能超过20个字符!'";
}
else
{
string UserId = "", Key = "";
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
try
{
SqlCommand cm = new SqlCommand("ajaxLogin", cn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add(new SqlParameter("@UserName", SqlDbType.NVarChar, 50));
cm.Parameters["@UserName"].Value = UserName;
//==========输出参数
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 (Exception e)
{
rStr = @"success:false,err:'原因\\n" + Js(e.Message) + "'";
}
cn.Close();
}
return rStr;
}
///
/// 删除用户信息,“用户ID+key”来删除,key参数是防止乱删除用户信息的
///
///
public static string Logout()
{
HttpRequest Request = HttpContext.Current.Request;
string 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();
try
{
SqlCommand cm = new SqlCommand("ajaxLogout", cn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add(new SqlParameter("@UserId", SqlDbType.NVarChar, 18));
cm.Parameters["@UserId"].Value = UserId;
cm.Parameters.Add(new SqlParameter("@UserKey", SqlDbType.NVarChar, 5));
cm.Parameters["@UserKey"].Value = Key;
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:'用户信息不存在!'";
else rStr="success:true";
cm.Dispose();
}
catch (Exception e)
{
}
cn.Close();
return rStr;
}
///
/// 发表信息
///
///
public static string Say()
{
HttpRequest Request = HttpContext.Current.Request;
string 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:'信息传递不完整!'";
else
{
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
try
{
SqlCommand cm = new SqlCommand("ajaxSay", cn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add(new SqlParameter("@UserKey", SqlDbType.NVarChar, 5));
cm.Parameters["@UserKey"].Value = Key;
cm.Parameters.Add(new SqlParameter("@From", SqlDbType.NVarChar, 18));
cm.Parameters["@From"].Value = From;
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:'发表失败!\\n原因:接收者已经不存在!'";
else rStr = "success:true";
cm.Dispose();
}
catch (Exception e)
{
rStr = "sucess:false,err:'发表失败!原因\\n" + Js(e.Message) + "'";
}
cn.Close();
}
return rStr;
}
///
/// 用户列表
///
///
public static string ReadUser()
{
HttpRequest Request = HttpContext.Current.Request;
string rStr = "", UserId = Request.Form["uid"];
if (IsNull(UserId)) rStr += "success:false,err:'用户id丢失!'";
else
{
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
try
{
SqlCommand cm = new SqlCommand("ajaxReadUser", cn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add(new SqlParameter("@UserId", SqlDbType.NVarChar, 18));
cm.Parameters["@UserId"].Value = UserId;
string 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 (Exception e)
{
rStr = @"success:false,err:'发生如下错误\\n" + Js(e.Message) + "'";
}
cn.Close();
}
return rStr;
}
///
/// 信息列表
///
///
public static string Read()
{
HttpRequest Request = HttpContext.Current.Request;
string rStr = "";
string UserId = Request.Form["uid"], Key = Request.Form["key"];
if (IsNull(UserId) || IsNull(Key)) rStr = "success:false,err:'用户信息丢失!'";
else
{
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["db"]);
cn.Open();
try
{
SqlCommand cm = new SqlCommand("ajaxRead", cn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add(new SqlParameter("@UserId", SqlDbType.NVarChar, 18));
cm.Parameters["@UserId"].Value = UserId;
cm.Parameters.Add(new SqlParameter("@UserKey", SqlDbType.NVarChar, 5));
cm.Parameters["@UserKey"].Value = Key;
SqlDataReader dr = cm.ExecuteReader();
string j = "";
while (dr.Read()) j += ",'" + Js(dr[0].ToString()) + "'";
dr.Close();
cm.Dispose();
rStr = "success:true,data:[" + (j == "" ? "" : j.Substring(1)) + "]";
}
catch (Exception e)
{
rStr = "success:false,err:'发生以下错误" + Js(e.Message) + "'";
}
cn.Close();
}
return rStr;
}
}
lib.js文件中的代码
Showbo.IsIE=!!document.all;
Showbo.IsFireFox=navigator.userAgent.indexOf("Firefox")!=-1;
Showbo.trim=function(v,reg){if(reg)return v.replace(reg,'');else return v.replace(/^\s*|\s*$/,'');}
Showbo.getJson=function(v){return eval('('+v+')');}
//获取某个对象的绝对位置
Showbo.getAbsPos=function(o,addXY){o=Showbo.$(o);var p=new Object();p.x=o.offsetLeft;p.y=o.offsetTop;while(o=o.offsetParent){p.x+=o.offsetLeft;p.y+=o.offsetTop;}if(addXY){if(!isNaN(addXY.x))p.x+=addXY.x;if(!isNaN(addXY.y))p.y+=addXY.y;}return p;}
Showbo.$=function(Id,isFrame){
var o;
if("string"==typeof(Id))o= document.getElementById(Id);
else if("object"==typeof(Id))o= Id;
else return null;
return isFrame?(Showbo.IsIE?document.frames[Id]:o.contentWindow):o;
}
Showbo.$s=function(){
var o,tag;
if(arguments.length==1){
o=document;tag=arguments[0];
}
else{
o=arguments[0];tag=arguments[1];
}
return o.getElementsByTagName(tag);
}
//扩展IE下的XMLHttpRequest
if(Showbo.IsIE&&!window.XMLHttpRequest)
window.XMLHttpRequest=function(){
var acX=['msxml2.xmlhttp.5.0','msxml2.xmlhttp.4.0','msxml2.xmlhttp.3.0','msxml2.xmlhttp','microsoft.xmlhttp'],Xhr;
for(var i=0;i
}
Showbo.Ajax={
pools:[]//注意pools存储的对象为{xhr:ajax对象,status:ajax的状态},其中ajax的状态为1/0,1表示在使用中,0表示readyState==4了并且执行了回调函数
,getObject:function(){
for(var i=0;i<this.pools.length;i++)if(this.pools[i].status===0){
this.pools[i].status=1;//设置为使用状态
this.pools[i].xhr.onreadystatechange=function(){}//删除状态转换函数
this.pools[i].xhr.abort();//调用abort
return this.pools[i];
}
var xhr=new XMLHttpRequest();
if(xhr.readyState==null){//更正某些Mozilla浏览器无readyState的问题
xhr.readyState=0;
xhr.addEventListener("load",function(){
xhr.readyState=4;
if(typeof(xhr.onreadystatechange)=="function")xhr.onreadystatechange();
},false);
}
this.pools[this.pools.length]={xhr:xhr,status:1,err:false};
return this.pools[this.pools.length-1];
}
,send:function(cfg){
if(!cfg||!cfg.url)throw("url不正确!");
var method=cfg.method,asy="boolean"==typeof(cfg.asy)?cfg.asy:true;
if(!method)method="get";
if(method.toLocaleLowerCase()=='get'){
var _dc=new Date().getTime();
cfg.params=cfg.params?cfg.params+'&_dc='+_dc:'_dc='+_dc;
if(cfg.url.indexOf("?")!=-1)cfg.url+="&"+cfg.params;
else cfg.url+="?"+cfg.params;
cfg.params=null;
}
else if(typeof(cfg.params)=="undefined")cfg.params='';
var o=this.getObject();//注意并非实际的xhr对象
if(!o.xhr)throw("未能创建ajax对象!");
o.xhr.open(method,cfg.url,asy);
if(method.toLocaleLowerCase()=='post')o.xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
o.xhr.onreadystatechange=function(){
if(o.xhr.readyState==4){
if(o.xhr.status==200||o.xhr.status==0){
if("function"==typeof(cfg.success))cfg.success(o.xhr,cfg.otherParams);
}
else if("function"==typeof(cfg.failure))cfg.failure(o.xhr,cfg.otherParams);
o.status=0;//=============更改状态为未使用
}
}
o.xhr.send(cfg.params);
}
}
var RequstUrl="op.asp";//================================为不同的编程语言时修改这个变量的值
Showbo.Chat={
hint:false//如果有信息到来,是否提示用户
,UserId:-1//服务器返回的用户Id
,UserKey:-1//服务器返回的用户键
,bd:null//编辑器的document.body对象
,ct:null//显示信息的div
,selTo:null//用户select
//下面这两个读取时间需要分开,最好不要设置为同样的,要不两个计时器会同时执行,导致获取对象时同时进入for语句获取到同一个对象,导致firefox可能在同时使用这个对象时出错
,timeUser:10//获取信息的时间间隔,单位为秒
,timeMsg:10//获取信息的时间间隔,单位为秒
,nowUserId:-1//如果选择了点对点对话,此对象存储的是该用户的id,初始化在线用户时用到
,timerUsers:null
,timerMsg:null
,chrHint:function(o){
o.value=this.hint?'启用信息提示':'关闭信息提示';
this.hint=!this.hint;
}
,setNote:function(msg){ Showbo.$('dvOpNote').innerHTML=msg;}
,setBtn:function(disabled){Showbo.$('btnLT').disabled=Showbo.$('btnSend').disabled=disabled;}
,addItemToCT:function(msg){var d=document.createElement('div');d.innerHTML+=msg;this.ct.appendChild(d);}
,callback:function(xhr,op){
var o=xhr.status==200?Showbo.getJson(xhr.responseText):{success:false,err:'动态页发生严重错误,请联系管理员!'+xhr.responseText};
this.setNote('');
this.setBtn(false);
Showbo.$('dvWait').style.display='none';
Showbo.$('frmLogin').style.display='block';
if(o.success){
switch(op){
case 'login':
Showbo.$('dvLogin').style.display='none';
Showbo.$('dvChat').style.display='block';
this.ct=Showbo.$('dvMsg');this.selTo=Showbo.$('selContacts');
Showbo.Editor.render({id:'editor',height:100});
//成功登录,设置用户id和键,并且启动读用户列表和信息的计时器,并初始化编辑器
this.UserId=o.UserId;this.UserKey=o.Key;
this.read('read');
this.timerMsg=setInterval("Showbo.Chat.read('read')",this.timeMsg*1000);
this.read('readuser');
this.timerUsers=setInterval("Showbo.Chat.read('readuser')",this.timeUser*1000);
break;
case 'logout':
Showbo.$('dvLogin').style.display='block';
Showbo.$('dvChat').style.display='none';
this.ct.innerHTML='';
this.UserId=this.UserKey=-1;
clearInterval(this.timerUsers);clearInterval(this.timerMsg);
this.timerUsers=this.timerMsg=null;this.nowUserId=-1;
break;
case 'say':
var who=this.selTo.value=='-1'?'':this.selTo.options[this.selTo.selectedIndex].text,v=this.bd.innerHTML;
v=v.replace(/^
|<\/p>$/gi,'');
this.addItemToCT('我'+(who?'对'+who+'':'')+'说:'+v);
this.bd.innerHTML=Showbo.IsIE?'':' ';
if(this.ct.scrollHeight>this.ct.offsetHeight)this.ct.scrollTop=this.ct.scrollHeight-this.ct.offsetHeight;
break;
case 'readuser':this.initSel(o.data);break;
case 'read':this.initMsgList(o.data);break;
}
}
else alert(o.err);
}
,Login:function(f){
if(Showbo.trim(f.nn.value)==''){alert('昵称不能为空!');f.nn.select();return false;}
else if(f.nn.value.length>20){alert('昵称不能超过20个字符!');f.nn.select();return false;}
Showbo.$('dvWait').style.display='block';
f.style.display='none';
var me=this;
Showbo.Ajax.send({url:RequstUrl,method:'post',params:'nn='+encodeURIComponent(f.nn.value)+'&op=login',otherParams:'login'
,success:function(p1,p2){me.callback(p1,p2);},failure:function(p1){me.callback(p1);}});
return false;
}
,Logout:function(needConfirm){
var me=this; if(needConfirm&&!confirm('确认退出?!'))return false; this.setNote('正在退出,请等待...'); this.setBtn(true); Showbo.Ajax.send({ url:RequstUrl,method:'post'
,params:'op=logout&uid='+this.UserId+'&key='+this.UserKey,otherParams:'logout' ,success:function(p1,p2){me.callback(p1,p2);}
,failure:function(p1){me.callback(p1);}
});}
,read:function(op){
var me=this;
Showbo.Ajax.send({
url:RequstUrl,method:'post',params:'op='+op+'&uid='+this.UserId+(op=='readuser'?'':'&key='+this.UserKey),otherParams:op
,success:function(p1,p2){me.callback(p1,p2);},failure:function(p1){me.callback(p1);}
});
}
,initSel:function(arr){
if(this.UserId==-1)return false;
this.selTo.options.length=1;
var i=0,selIndex=0,len=arr.length;
for(;i
if(arr[i].id==this.nowUserId)selIndex=i+1;
}
this.selTo.selectedIndex=selIndex;
}
,initMsgList:function(arr){
if(this.UserId==-1)return false;
if(arr.length==0)return false;
for(var i=0;i
if(this.hint)window.focus();
if(this.ct.scrollHeight>this.ct.offsetHeight)this.ct.scrollTop=this.ct.scrollHeight-this.ct.offsetHeight;
}
,send:function(){//发送信息
var v=this.bd.innerHTML.replace(/<\/?p>/gi,'');
if(Showbo.trim(Showbo.trim(v),/
| /gi,'')==''){
alert('发送的信息不能为空!');
this.bd.innerHTML=Showbo.IsIE?'':' ';
Showbo.$('HtmlEditor',true).focus();
return false;
}
v=Showbo.trim(v,/^(
)*|(
)*$/gi);
this.setNote('正在发送信息,请等待...');
this.setBtn(true);
var me=this;
Showbo.Ajax.send({url:RequstUrl,method:'post'
,params:'op=say&from='+this.UserId+'&key='+this.UserKey+'&to='+this.selTo.value+'&ct='+encodeURIComponent(v),otherParams:'say'
,success:function(p1,p2){me.callback(p1,p2);},failure:function(p1){me.callback(p1);}
});
}
};
window.onload=function(){Showbo.$('frmLogin').nn.focus();}
window.onbeforeunload=function(e){e=e||event;if(Showbo.Chat.UserId!=-1)e.returnValue='确认退出聊天室?!';}
window.onunload=function(){if(Showbo.Chat.UserId!=-1)Showbo.Chat.Logout(false);}//如果登录了系统,离开当前页面时将注销
op.ashx
using System;
using System.Web;
public class op : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.Charset = "gb2312";
context.Response.ContentType = "text/html";
HttpRequest Request = context.Request;
string Json = "{";
switch (Request.Form["op"])
{
case "login": Json += Ajax.Login(); break;
case "logout": Json += Ajax.Logout(); break;
case "readuser": Json += Ajax.ReadUser(); break;
case "read":Json+=Ajax.Read(); break;
case "say": Json += Ajax.Say(); break;
default: Json += "success:false,err:'参数错误!'"; break;
}
Json += "}";
context.Response.Write(Json);
}
public bool IsReusable {
get {
return false;
}
}
}
- yoyo
日期:2009-9-7 17:13:36 IP:116.30.*.*
學習了管理员回复(2009-9-7 17:27:17)
一起努力!~
- 老王
日期:2009-9-8 9:27:46 IP:124.193.*.*
非常棒 不错 很好 学习了很多技巧 收藏管理员回复(2009-9-8 9:44:35)
O(∩_∩)O~
- 来无影
日期:2009-9-8 15:07:30 IP:218.107.*.*
真的不错,你只是蛮全面的.ASP,PHP.NET .哈.管理员回复(2009-9-8 15:50:52)
我主要是学asp和asp.net的,php只是在有时间的时候看看,技多不压人吗~~呵呵
- jack
日期:2009-9-9 11:19:49 IP:221.224.*.*
测试下管理员回复(2009-9-9 21:20:10)
O(∩_∩)O~
- kaizi_sun
日期:2009-9-23 21:18:34 IP:60.163.*.*
收了,慢慢研究:)管理员回复(2009-9-24 21:15:49)
呵呵~
- hehe
日期:2009-11-12 21:12:42 IP:125.70.*.*
我还是看一下
管理员回复(2009-11-13 8:41:49)
hoho~~
- 呵呵呵呵
日期:2010-3-30 16:26:12 IP:221.224.*.*
不会用啊管理员回复(2010-3-31 8:42:33)
都是很基本的js写的,只是打包了而已。O(∩_∩)O~
- jiajia
日期:2010-4-12 12:48:10 IP:61.142.*.*
看下来有点乱乱的,我是新手,很难看懂呀。管理员回复(2010-4-12 16:38:06)
有些功能写成面向对象的形式了,对初学者来说看起来可能有点吃力~~
- 志爱
日期:2010-4-21 1:28:03 IP:119.130.*.*
为什么,我登录时说“动态页发生严重错误,......” 的?该怎么改你的程序?请教下管理员回复(2010-4-21 9:08:38)
具体错误是什么啊,不要用...代替啊。
根据你的这个描述,应该是请求的页面的路径未设置对,如果路径设置对了,由于使用了try...catch语句,应该会显示具体的错误信息的。
出现这个错误,也可能有以下的可能
1.ajax请求的动态页面路径未设置对,请参考js里面的说面,修改+展开-JavaScriptvar RequstUrl="op.asp";//===============为不同的编程语言时修改这个变量的值
注意路径的问题
2.确认使用的编程语言。js代码块,就是上面的贴出来的请求的是asp的。
1)如果你服务器是iis6,需要在“服务器扩展”中启用“Active Server Pages",默认是不启用的。
2)如果是C#,确认安装了.net framework2.0版本,并且网站的属性选项卡中的asp.net选项设置成了2.0版本的。
3.其他的原因,动态页出现错误。这个就得需要你贴出具体错误信息了。要不不知道如何分析。因为使用了try..catch语句,所以如果执行sql语句出错的话会有具体的错误信息显示出来
- 志爱
日期:2010-4-21 14:06:43 IP:121.8.*.*
应该就是第三点原因。。。
错误图片可以看地址:http://b32.photo.store.qq.com/http_imgload.cgi?/rurl4_b=2b61906bf852e271fb5e4ab5567bd1a82f93611e0c04c5cd89a635405166fb3857b664e72e0d0884944d6e20c574cdef1d76d2b7a94cecb0844c6a44297c2f852ee769bbe73fff197d13b6df8d324b05c42669d4&a=31&b=32
已经修改了:
var RequstUrl="op.asp";//================================为不同的编程语言时修改这个变量的值
但是还不可以....
还有个问题,有没有见过新浪体育的那个web聊天程序吗?知道怎么实现做的吗? 看下:
http://b35.photo.store.qq.com/http_imgload.cgi?/rurl4_b=2b61906bf852e271fb5e4ab5567bd1a8d36aa8e38b9a37f46bd51679da203c3fe83dd81b03255d63cc7b710c6c4dcb8a34a8330e56b84e5dfe3257f324b531a0d4c55e5e4a482a05d17183e81448e766c12b5578&a=38&b=35
很强的一个聊天程序
管理员回复(2010-4-21 15:43:30)
你是通过IIS访问的吗?怎么显示出源代码来了?⊙﹏⊙b汗
同时检查下web.config文件中的编码是否配置为gb2312了,默认的是utf-8的编码,但是实际使用的gb2312编码,统一编码防止出现乱码的问题。+展开-XML<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>
新浪那个功能比较多,实现起来比较麻烦。
现在正在研究flex,看研究有点进展了做一个于flash的soket的聊天室,这样就不需要客户端间隔一定时间后发送请求了。
日期:2010-6-7 8:50:19 IP:122.74.*.*
您的编辑器是用的UBB吗?管理员回复(2010-6-7 8:52:59)
是的~~UBB比较好控制脚本攻击~O(∩_∩)O~
- 临时
日期:2010-7-3 15:25:31 IP:211.140.*.*
动态页严重错误,请联系管理员 怎么回事 VS2008&IE管理员回复(2010-7-3 15:54:50)
动态页面我都是用了try...catch语句,所以如果配置不对会输出原因。而出现你说的错误,应该是你请求的页面路径没有设置对,出现了404,找不到页面的错误。+展开-JavaScriptvar RequstUrl="op.asp";//这个变量你修改过了没有??默认的是asp,如果你的是aspx,你要修改这个变量,并且注意路径
如果不行加下面这句调试下+展开-JavaScriptalert(xhr.status+'\n'+xhr.resonseText)//加上这句看状态和返回什么信息调试下
var o=xhr.status==200?Showbo.getJson(xhr.responseText):{success:false,err:'动态页发生严重错误,请联系管理员!'+xhr.responseText};
以后可以留下email地址,方便管理员发email通知。O(∩_∩)O~
- yintao
日期:2010-11-6 15:27:44 IP:125.70.*.*
这个怎么调用 哦?管理员回复(2010-11-8 13:42:15)
先下载完整示例代码,然后将里面的数据库文件还原到mssqlserver2000+以上版本的数据库中,配置iis,建立一个虚拟目录指向你下载的rar解压缩后的目录中就可以了。目前只支持asp,asp.net和php版本。如果使用不同编程语言,请修改opurl这个变量存储的页面url
- lllll
日期:2011-3-7 23:59:20 IP:117.68.*.*
你这哪里用到了asp.net。。。管理员回复(2011-3-8 13:44:15)
后台语言是asp.net的啊。。C#的
- 高高
日期:2011-3-10 17:53:53 IP:58.34.*.*
测试管理员回复(2011-3-10 21:18:48)
:-)
- pro
日期:2011-3-25 11:18:19 IP:59.61.*.*
请问还有人吗?
数据库文件怎么用。怎样还原。数据库08的。管理员回复(2011-3-25 14:51:42)
测试用的例子是mssql2000,不知道能还原到2008的美~~
那个是备份文件,不是数据库的源文件,不能附加,只能还原。
- pro
日期:2011-3-25 16:17:50 IP:59.61.*.*
不能还原,里面有几张表了,能把建表的create 贴出来吗
或者能加下QQ不,跟您多学学。管理员回复(2011-4-29 11:01:16)
数据库sql脚本已经贴出来,去这里下载
ajax无刷新聊天室数据库sql脚本文件
qq不常用,如果有需要可以加msn:showtime_bo@hotmail.com
- pro
日期:2011-4-29 9:38:37 IP:59.61.*.*
无法找到资源。,,,sql脚本文件。
- pro
日期:2011-4-29 14:56:51 IP:59.61.*.*
问一个关于.net iframe 自适应 (动态加载页面)的高度。。。。的问题。。。
<iframe id="middle" src="abc.aspx?a=<%= session['aa']%>" scrolling="no" frameborder="0"></iframe>
而abc.aspx这个是靠传进来的参数决定高度。也就是说abc.aspx这个页面是动态加载的不固定高度。这样怎么让iframe自适应abc.aspx的高度。要可以兼容大部分主流浏览器。。。。管理员回复(2011-4-29 15:08:21)
只要abc.aspx页面没有跨域,给abc.aspx添加onload事件设置iframe的高度即可+展开-JavaScript<script type="text/javascript">
window.onload=function(){ parent.getElementById('middle').style.height=document.body.scrollHeight+'px';
}
</script>
更多iframe自适应高度参考
iframe自适应高度
- pro
日期:2011-4-29 16:05:22 IP:59.61.*.*
alert(parent.getElementById('bottom').style.height);
我把這句放在內容頁,不執行。管理员回复(2011-4-29 17:47:31)
父页有bottom这个对象没有?~没有的空对象调用属性会出错
- pro
日期:2011-5-3 9:05:31 IP:59.61.*.*
有,我网络上找到了一个,挺不错的,贴出来共享一下。。
main.html:
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=gb2312' />
<title>iframe自适应加载的页面高度</title>
</head>
<body>
<iframe src="child.html"></iframe>
</body>
</html>
child.html:
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=gb2312' />
<title>iframe 自适应其加载的网页(多浏览器兼容)</title>
<script type="text/javascript">
<!--
function iframeAutoFit()
{
var ex;
try
{
if(window!=parent)
{
var a = parent.document.getElementsByTagName("IFRAME");
for(var i=0; i<a.length; i++) //author:meizz
{
if(a[i].contentWindow==window)
{
var h1=0, h2=0;
if(document.documentElement&&document.documentElement.scrollHeight)
{
h1=document.documentElement.scrollHeight;
}
if(document.body) h2=document.body.scrollHeight;
var h=Math.max(h1, h2);
if(document.all) {h += 4;}
if(window.opera) {h += 1;}
a[i].style.height = h +"px";
}
}
}
}
catch (ex){}
}
if(document.attachEvent)
{
window.attachEvent("onload", iframeAutoFit);
//window.attachEvent("onresize", iframeAutoFit);
}
else
{
window.addEventListener('load', iframeAutoFit, false);
//window.addEventListener('resize', iframeAutoFit, false);
}
//-->
</script>
</head>
<body>
<table border="1" width="200" style="height: 400px; background-color: yellow">
<tr>
<td>iframe 自适应其加载的网页(多浏览器兼容,支持XHTML)</td>
</tr>
</table>
</body>
</html>管理员回复(2011-5-3 9:16:03)
//author:meizz,一看到这个我心里面就坦然了,O(∩_∩)O~这个可是CSDN的大牛~
- ·AJAX跨域问题解决办..
- ·ajax问题总结
- ·jQuery dataType指定..
- ·ajax无刷新上传文件..
- ·ajax对象abort方法
- ·JavaScript代码,变..
- ·fckeditor编辑器在F..
- ·JavaScript解析XML的..
- flash/flex/fcs/AIR(752)
- Asp.Net/C#/WCF(595)
- 操作系统及应用软件(376)
- JavaScript/Ajax(330)
- SQL及数据库(134)
- 黑客技术(115)
- Asp/VBScript(111)
- HTML/WML/CSS兼容/XML(102)
- PHP/apache/Perl(96)
- 网站排名及优化(92)
- 其他(75)
- 个人日志(66)
- lucene.net/分词技术(33)
- 计算机网络(26)
- 机械重工(26)
- C#设计模式(24)
- Google Maps开发(17)
- 日语学习(15)
- Canvas/VML/SVG(13)
- linux(11)
- 游戏开发(8)
- 正则表达式(5)
- Jsp/Java(4)
- ·javascript实现html..
- ·Javascript风格要素..
- ·Javascript风格要素
- ·动态加载JavaScript
- ·JavaScript陷阱
- ·ajax技巧
- ·IE对CSS样式表的限制..
- ·什么是Javascript匿..
