首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

【例3-3CallBackObject.js

function CallBackObject()

{

    this.XmlHttp = this.GetHttpObject();

}

 

CallBackObject.prototype.GetHttpObject = function()

{

    var xmlhttp;

    /*@cc_on

    @if (@_jscript_version >= 5)

    try

    {

        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

    }

    catch (e)

    {

        try

        {

            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

        }

        catch (E)

        {

            xmlhttp = false;

        }

    }

    @else

    xmlhttp = false;

    @end @*/

    if (!xmlhttp && typeof XMLHttpRequest != 'undefined')

    {

        try

        {

            xmlhttp = new XMLHttpRequest();

        }

        catch (e)

        {

            xmlhttp = false;

        }

    }

    return xmlhttp;

}

 

CallBackObject.prototype.DoCallBack = function(eventTarget, eventArgument)

{

    var theData = '';

    var theform = document.forms[0];

    var thePage = window.location.pathname + window.location.search;

    var eName = '';

   

    theData  = '__EVENTTARGET='  +

        escape(eventTarget.split("$").join(":")) + '&';

    theData += '__EVENTARGUMENT=' + eventArgument + '&';

    theData += '__VIEWSTATE=' +

        escape(theform.__VIEWSTATE.value).replace(new RegExp('\\+', 'g'), '%2b') + '&';

    theData += 'IsCallBack=true&';

    for (var i=0; i<theform.elements.length; i++)

    {

        eName = theform.elements[i].name;

        if (eName && eName != '')

        {

            if (eName == '__EVENTTARGET' ||

                eName == '__EVENTARGUMENT' ||

                eName == '__VIEWSTATE' )

            {

                // Do Nothing

            }

            else

            {

                theData = theData +

                    escape(eName.split("$").join(":")) + '=' + theform.elements[i].

value;

                if( i != theform.elements.length - 1 )

                    theData = theData + '&';

            }

        }

    }

   

    if (this.XmlHttp)

    {

        if( this.XmlHttp.readyState == 4 || this.XmlHttp.readyState == 0 )

        {

            var oThis = this;

            this.XmlHttp.open('POST', thePage, true);

            this.XmlHttp.onreadystatechange = function(){ oThis.ReadyState

Change(); };

            this.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-

form-urlencoded');

            this.XmlHttp.send(theData);

        }

    }

}

 

CallBackObject.prototype.AbortCallBack = function()

{

    if (this.XmlHttp)

        this.XmlHttp.abort();

}

 

CallBackObject.prototype.OnLoading = function()

{

  // Loading

}

 

CallBackObject.prototype.OnLoaded = function()

{

  // Loaded

}

 

CallBackObject.prototype.OnInteractive = function()

{

  // Interactive

}

 

CallBackObject.prototype.OnComplete = function(responseText, responseXml)

{

  // Complete

}

 

CallBackObject.prototype.OnAbort = function()

{

  // Abort

}

 

CallBackObject.prototype.OnError = function(status, statusText)

{

  // Error

}

 

CallBackObject.prototype.ReadyStateChange = function()

{

    if (this.XmlHttp.readyState == 1)

    {

        this.OnLoading();

    }

    else if (this.XmlHttp.readyState == 2)

    {

        this.OnLoaded();

    }

    else if (this.XmlHttp.readyState == 3)

    {

        this.OnInteractive();

    }

    else if (this.XmlHttp.readyState == 4)

    {

        if (this.XmlHttp.status == 0)

            this.OnAbort();

        else if (this.XmlHttp.status == 200 && this.XmlHttp.statusText == "OK")

            this.OnComplete(this.XmlHttp.responseText, this.XmlHttp.responseXML);

        else

            this.OnError(this.XmlHttp.status, this.XmlHttp.statusText, this.

XmlHttp.responseText);  

    }

}

2.服务器端部分(CallBackHelper类)

为了处理CallBackObject对象发送到服务器端的请求,需要在服务器端增加一个C#CallBackHelper,其主要作用是读取HTTP请求并且返回响应。CallBackHelper类的实现比较简单,如例3-4所示。

【例3-4CallBackHelper.cs

using System;

using System.Web;

 

namespace ch32

{

    /// <summary>

    /// CallBackHelper 的摘要说明

    /// </summary>

    public sealed class CallBackHelper

    {

        private CallBackHelper() { }

 

        public static bool IsCallBack

        {

            get

            {

                HttpRequest hr = CallBackHelper.GetHttpRequest();

                return hr.Params["IsCallBack"] != null;

            }

        }

 

        public static void Write( string Text )

        {

            HttpResponse hr = CallBackHelper.GetHttpResponse();

     

            hr.Clear();

            hr.StatusCode = 200;

            hr.StatusDescription = "OK";

            hr.Write( Text );

            hr.Flush();

            hr.End();

        }

 

        public static void HandleError( Exception e )

        {

            HttpResponse hr = CallBackHelper.GetHttpResponse();

 

            hr.Clear();

            hr.StatusCode = 200;

            hr.StatusDescription = "ERROR";

            hr.Write( e.ToString() );

            hr.Flush();

            hr.End();

        }

 

        private static HttpResponse GetHttpResponse()

        {

            HttpResponse hr = null;

            try

            {

                hr = System.Web.HttpContext.Current.Response;

            }

            catch( NullReferenceException nre )

            {

                throw new

                    Exception("CallBackHelper could not access current HttpResponse

object", nre);

            }

 

            return hr;

        }

 

        private static HttpRequest GetHttpRequest()

        {

            HttpRequest hr = null;

            try

            {

                hr = System.Web.HttpContext.Current.Request;

            }

            catch( NullReferenceException nre )

            {

                throw new

                    Exception("CallBackHelper could not access current HttpRequest

object", nre);

            }

 

            return hr;

        }

    }

}

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论