榕树下。。。

在成功的道路上,你没有耐心去等待成功的到来,那么,你只好用一生的耐心去面对失败
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Ajax初步入门体会

Posted on 2005-11-30 12:19  农村的芬芳  阅读(666)  评论(2)    收藏  举报
从上周开始学习使用ajax以来,有了一些收获.暂用小笔头记下来.嘿嘿


大至可分以下几步:


1:配置文件

对于web.config中的文件配置一定要有.这是必须的,它指定了包装器的httphandler,我们知道所有的aspx 的请求都是由该system.web.ui.pagehandlerfactory类来处理.具体怎么工作,我也不知道.以后再研究啦.

其配置文件如下:

<configuration>
 
<system.web>
   
<httpHandlers>
     
<add verb="POST,GET" path="ajax/*.ashx"
         
type="Ajax.PageHandlerFactory, Ajax" />
    </httpHandlers> 

   
...
 
<system.web>
</configuration>

我们看着ajax/*.ashx是不是觉得有个路径,其实不用路径.就这样写好啦.它就是标明其所有的页面都有PageHandlerFactory来处理.

Global.asax文件:我看到有的例程中这个说明,但目前我测试加上不加一样.还待研究.


好啦,现在我们来看如何在aspx页面使用吧.

先建一个后台cs文件:

public Calss AjaxTest

{


    [Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.ReadWrite)]
    public string GetName()

    {

        string name = "测试中心";

        return name;
    }
}


aspx页面

<%@ Page Inherits="AjaxPlay.test" Codebehind="test.aspx.cs" ... %>
<html>
<head>
 
<script language="javascript" src="ajax/common.ashx"></script>
 
<script language="javascript" src="ajax/AjaxPlay.Sample,AjaxPlay.ashx"></script>
</head>
  <body>   

   
<form id="Form1" method="post" runat="server">

    <input id=aa type = button onclick="wjy()">


     
<script language="javascript">
        function wjy()

        {
       
var res = AjaxTest.GetName(test1);

        alert(res);

        }
 
     
</script>
    </form>   

 
</body>
</html>

如在test.aspx.cs文件中注册ajax使用也可

如:Ajax.Utility.RegisterTypeForAjax(typeof( 程序集名称.Ajaxtest));

在这儿可以看到回调函数可以返回数据类型有以下几种:

  • Value——服务器端函数实际返回的值(无论是字符串、自定义对象还是数据集)。
  • Error——错误消息,如果有的话。
  • Request——xml http请求的原始响应。
  • Context——上下文对象

    这就是一个简单的ajax应用例子



    还有:Ajax不权能返回简单的数据类型,例字符串,整型,符点型等,还能返回dataset,datatable,以及自定义数据类型及对象.

    在这里我们假设从服务器端返回一个dataset哪么在客户端的操作dataset如下:

    function callback_GetProductForSongWords(res)
    {
     if(res != null && res.value != null && res.value.Tables != 0 && res.value.Tables.length == 1)
     {
      if(res.value.Tables[0].Rows.length>0)
      {
       
    document.getElementById("songname").innerHTML = "<a href='Product.aspx?ProductID="+res.value.Tables[0].Rows[0]["PRODUCTID"]+"' target=_blank>" + res.value.Tables[0].Rows[0]["PRODUCTNAME"]+"</a>";
       document.getElementById("productprice").innerHTML =formatPrice(res.value.Tables[0].Rows[0]["PRODUCTPRICE"]);
       document.getElementById("buylink").innerHTML ="&nbsp;<a href='Cart.aspx?ProductID="+res.value.Tables[0].Rows[0]["PRODUCTID"]+"' target=_blank><img src='images/buy.gif' width=14 height=10 border=0>&nbsp;购买</a>";
       document.getElementById("specialimg").innerHTML ="<a href='Product.aspx?ProductID="+res.value.Tables[0].Rows[0]["PRODUCTID"]+"' target=_blank><IMG height=200 src=images\\"+res.value.Tables[0].Rows[0]["MIDDLEIMAGE"]+" width=200 border=0></a>";
       if(res.value.Tables[0].Rows[0]["LYRIC"]!=null)   
        document.getElementById("txtlyric").value =  res.value.Tables[0].Rows[0]["LYRIC"];
       else if( res.value.Tables[0].Rows[0]["DESCRIPTION"] !=null)
        document.getElementById("txtlyric").value =  res.value.Tables[0].Rows[0]["DESCRIPTION"];
       else if( res.value.Tables[0].Rows[0]["SPECIALDESCRIPTION"]!=null)
        document.getElementById("txtlyric").value =  res.value.Tables[0].Rows[0]["SPECIALDESCRIPTION"];
       else
        document.getElementById("txtlyric").value="";
         
      }
     }
    }
    Ajax还可以返回自定义类,唯一的要求是必须用Serializable属性标记.

    可能有误,欢迎拍砖.