随笔 - 2, 文章 - 0, 评论 - 20, 引用 - 0
数据加载中……

利用回调实现脚本实体类和模拟Ajax

这里有几点。 我们用asp.net开发数据库应用时。时常要建立一些实体如
 public class UserEntity
{
   
public string UserName
   
{
     
get{
     
return "";}

    }

   
public string UserEmail
    
{
      
get{
       
return "" ;}

     }

}

      下面要讲的是如何使用脚本来模拟这种实体

     首先 要讲解概念 要返还类似这种实体脚本可以这么写 

 

   UserEntity=function()
{
  
return {"UserName":"shenyi","UserEmail":"shenyi@csdn.net"}
}

     这样我们在 脚本中只要写

   var scriptEntity=new UserEntity();
  scriptEntity.UserName;
  scriptEntity.UserEmail;

   就可以引用到,好  脚本实体构建好了。接下来我们要从服务器取数据如下

    新建一个aspx页面 假如叫 getData.aspx 在代码里写

   public void Page_load()
  
{
   
int userid=int.parse(Request.QueryString["uid"].ToString());
      
string sql="select * from Users where userid="+userid.ToString();
     
using(DataTable dt=SqlHelper.ExecuteDataSet(sql).Tables[0])   //SqlHelper 不要告诉我 不知道是什么
    {
        
// 这里构建一个 字符 令 一个 脚本变量 等于 {"UserName":dt.rows[0]["username].......}
        
//如  Response.Write("userReturnValue={.......//这里自己拼接}");
       Response.End();
    }

  }

 

    以下是如何把脚本和这个 aspx页面建立联系  如下直接是代码

   

 var UserReturnValue=""  //这个很重要一定要定义 因为在服务端要对其赋值 

ComJS
=function()
{
   
   
this.GetEntitying=function(uid,callback)
   
{
   
var scriptObj=document.createElement("script");
    scriptObj.type
="text/javascript";
    scriptObj.src
="getData.aspx?uid="+uid
     document.getElementsByTagName(
"head")[0].appendChild(scriptObj);
 
 
       scriptObj.onreadystatechange
=function()
        
{
            
if(scriptObj.readyState=="loaded")
            
{
                  
                 callback.EndGetEntity(UserReturnValue);
            }

        }

        
    }

}

 

    这里使用 callback回调 是最重要的一步 当脚本加载完毕后才会对UserReturnValue 进行赋值 因此我们不能直接获得这个实体.

  上面脚本写完后 我们在页面要开始获得这个 实体

 

  var cjs=new ComJS();  //初始化我们的脚本对象
   function BeginGetEntity()
      
{
         
this.EndGetEntity=function(entityDataList)
           
{
            
//entityDataList   这个就是最终的实体对象 你可以直接 用 entityDataList.UserName 或者 entityDataList.表里字段名
        
//来获取这个实体的对象
      
// 注意  业务操作 要在这个 函数内执行。因为这是一个回调。也就是当服务端把数据取到了 这边才开始执行
严格来说就是异步获取数据。类似Ajax  但是不使用 xmlhttp对象 
          }

      }

    
     var bge
=new BeginGetEntity();
        cjs.GetEntity(
"3",bgelist);  //这里的3代表我要取用户id等于3的 数据

 

    好/ 整个用脚本构建实体的方法写好 希望对大家尤其是初学者 会有点用。其实在脚本中要实现ajax不光只有xmlhttp可以实现 很普通的脚本也能实现

Tag标签: ajax,web,模拟,回调

posted on 2008-05-20 10:00 沈逸 阅读(2034) 评论(8)  编辑 收藏

评论

#1楼    回复  引用  查看    

1.cjs.GetEntitying("3",bge);
2.//如 Response.Write("UserReturnValue={.......//这里自己拼接}");

用类封装的太混乱吧

这样做耦合性,太····

还有好处呢?
2008-05-20 10:24 | wit      

#2楼    回复  引用  查看    

虽然实现了同样的功能,但是没看出有什么好处?
用xmlhttp来实现还是比较成熟,比较大众化的
2008-05-20 11:08 | 小寒      

#3楼    回复  引用    

独辟蹊径,好,其实主要是思想,有待再改进
2008-05-20 12:15 | fdfdfdf [未注册用户]

#4楼    回复  引用  查看    

借鉴思路! 使用 eval 也可..
2008-05-20 13:19 | 簡簡單單..      

#5楼    回复  引用    

个人用eval多一点,json在javascript里面,真的是好用的不得了啊
2008-05-20 15:11 | logic [未注册用户]

#6楼    回复  引用    

做下广告:-)
最近在做一个Ajax相关的东东,其中有一块是也将C#对象序列化成Json字符串的。现在已经可以将数组、List、Dictionary和普通的字符串、数字、日期等转换成Json了。
http://www.juekit.com/
2008-05-20 23:24 | 化石 [未注册用户]

#7楼    回复  引用  查看    

System.Web.Script.Serialization.JavaScriptSerializer ..
2008-05-21 08:47 | 丁一      

#8楼    回复  引用  查看    

scriptObj.src="getData.aspx?uid="+uid
document.getElementsByTagName("head")[0].appendChild(scriptObj);
这句有没有问题?
2008-05-21 11:15 | 时间太快      

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接: