ajax使用心得

 

   Ajax其实就是异步传输,技术适用性非常好,网络上也炒得十分火热,就其使用,我的观点是这样的,要实现什么?这样做值得吗?最后选择要实现的技术?

   Ajax的新颖和快捷性是仁者见仁,智者见智,在不同领域使用都有不同效果,但是个人认为有的时候也有麻烦存在,利用ajax,势必需要客户端和服务器段都写很多程序,发送-处理-返回在两端不断操作,程序可读性可维护性个人感觉不是太好,而且测试起来也比较麻烦。但是它解决了b/s的关键问题:异步处理,页面无停滞和等待现象

 就其使用无非就是提交数据/请求、返回数据/信息。实现方面个人目前使用就两种:

发送请求式(xmlhttp.open("post",pathStr,false); xmlhttp.open("get",pathStr,false);)和客户端直接调用服务器方法

 发送请求式:

假如我要用ajax实现用户登陆:

1         客户端得到控件值: uName uPass

2         创建浏览器对象

function createxmlhttp() //创建浏览器对象,已经考虑浏览器兼容性 

{

          var A=null;

           try

            {

                 A=new ActiveXObject("Msxml2.XMLHTTP")

             }

           catch(e)

             {

               try

               {

                  A=new ActiveXObject("Microsoft.XMLHTTP")

               }

              catch(oc)

               {

                       A=null ;

               }

              }

           if ( !A && typeof XMLHttpRequest != "undefined" )

          {

             A=new XMLHttpRequest() ;

          }

              return A ;

}

3 开始/发送请求……….

var info;

var xmlhttp=createxmlhttp();

xmlhttp.onreadystatechange = function()

      {

        if(xmlhttp.readyState == 4)

        {

            if(xmlhttp.status == 200)

            {               

                                        info =xmlhttp.responseText; //返回文本

                            }

             else

            {    

                 alert("ajax调用失败!"+xmlhttp.status);

            }       

         }       

          }

Var pathStr= logion.aspx?uname=uName&upass=uPass

xmlhttp.open("post",pathStr,false); //向预定义好的页面发送请求

xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");

xmlhttp.send(null); 发送

if(info=="OK")

           {

              alert("登陆成功!");

           }

           else

           {

              alert(info);

           }

4         服务器端设计

logion.aspx文件内保第一行

<%@ Page Language="C#" AutoEventWireup="true" CodeFile=" logion.aspx.cs" Inherits=" logion " %>

外其他都删除

5         服务器端logion.aspx.cs文件

Page_Load()方法做出响应并且返回response.write(“ok”) 直接返回;

客户端根据response.write()值得到消息

以上简单描述了ajax 的简单应用,在很多时候我们发送的是大段信息或者大量文字信息,或者返回的是xml,得注意下面几点:

1  加上下面行 限定编码 有的时候中文无法接受

Request.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");

2         如果是返回xml,得如下操作

   StringWriter sw = new StringWriter(); //

   XmlTextWriter xtw = new XmlTextWriter(sw); 创建xml格式对象

    xtw.WriteStartElement("hanswer"); //开始一个元素

    xtw.WriteString(ds.Tables["hocy"].Rows[0]["hanswer"].ToString());

xtw.WriteEndElement(); //结束一个元素 //一定要注意嵌套和关闭元素

sw.ToString/()格式成字符串

 Response.ContentType = "text/xml";

 然后response.write(sw);返回xml格式字符串

Xmlhttp属性

onreadystatechange*

指定当readyState属性改变时的事件处理句柄。只写

readyState

返回当前请求的状态,只读.

responseBody

将回应信息正文以unsigned byte数组形式返回.只读

responseStream

Ado Stream对象的形式返回响应信息。只读

responseText

将响应信息作为字符串返回.只读

responseXML

将响应信息格式化为Xml Document对象并返回,只读

status

返回当前请求的http状态码.只读

statusText

返回当前请求的响应行状态,只读

上面阐述中将返回responseTextresponseXML,其实都是简单应用,希望大家在使用时能灵活变通.

直接调用方法

还有一种就是在客户端调用服务器端的方法

服务器段如下定义:

比如类hocy_ajax里面有方法GetSclass(int bclassid)

[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.Read)]    //申明ajax方法

public string  GetSclass(int bclassid)

{

 //方法体

}

同时要在使用该方法的也面在中page_load()方法类定义该类

AjaxPro.Utility.RegisterTypeForAjax(typeof(hocy_ajax)); //注册

客户端才可以直接调用 :hocy_ajax. GetSclass(5);

此方法通用性比较差,经常出现如” hocy_ajax类没有定义之类的错误!

说白了就是客户端与服务器端的通讯问题,你服务器端数据可以直接是简单字符串返回也可以是固定结构返回还可以是xml对象返回,反正总之,客户端直接接受和使用.客户端发送也是一样,只要两边接口一致,信息可以无休止互相传递.

Ajax可说他新技术也可以说他是老方法,其实很有点面向对象的味道,按纽或者其它对象发出请求,服务器端异步处理事件和请求,避免以前那样重新带着参数全部返回服务器端,服务器端编译后在集体发送到客户端,以前很容易造成页面停滞、无法响应等现象,ajax技术解决了这一问题

Ajax并非万能,面对浏览器的的兼容性js的版本特性和js语言本身的局限,比起桌面程序的快捷等,还是有一定差距,不过利用ajax解决bs的问题足足有余,能够灵活运用还是在于不同人的领悟。
                                                       摘自:http://www.cnblogs.com/hocylan/archive/2007/11/16/961271.html

posted @ 2007-11-16 22:11  魏向峰  阅读(292)  评论(0编辑  收藏  举报