• AJAX介绍


    AJAX介绍

        AJAX并不是一种新的技术,而是一些已有技术的有机结合,主要包括:XmlHttpReflect

    一个AJAX框架基本上包括:一个自定义的HttpHandler、一段JavaScript代码.

     AJAX运行机制:

    XMLHTTP发送请求

    服务器处理请求

    返回客户端

    客户端通过XmlHttp对象向服务器发送一个Http请求,在服务端自定义的Http处理程序通过客户端发送的信息,使用反射(Reflect)调用指定的方法,且将方法的返回值发回客户端。

    以前我们使用XmlHttp实现无刷新页面的时候,是用XmlHttp来请求一个隐藏的页面,使用(Asp/Asp.Net)自带的HttpHandler,而在AJAX中,我们请求的也是一个隐藏的页面,不同的是这个页面的HttpHandler是由我们自己来实现。

     

    动手:

     

    1.   首先我们要实现一个Http处理程序(HttpHandler)来响应客户端的请求:

    实现自定义的HttpHandler需要实现IHttpHandler接口。

    该接口包含一个属性和一个方法:

    bool IHttpHandler.IsReusable

        void IHttpHandler.ProcessRequest(HttpContext context)

     

    例子:

            bool IHttpHandler.IsReusable

            {

                get { return true; }

            }

            void IHttpHandler.ProcessRequest(HttpContext context)

            {

                context.Response.Clear();

             //获取要调用的方法

                string methodName = context.Request.QueryString["me"];

               //获取程序集信息。

               //Czhenq.AJAX.Class1.Dencode是自定义的字符串编码方法

    string AssemblyName = Czhenq.AJAX.Class1.Dencode(

    context.Request.QueryString["as"]);

               //获取方法的参数

                string Arguments = context.Request.QueryString["ar"];
              

               //开始调用方法

                Type type = Type.GetType(AssemblyName);

                MethodInfo method = type.GetMethod(methodName, BindingFlags.NonPublic

     | BindingFlags.Public | BindingFlags.Static |

    BindingFlags.Instance);

                if (method != null)

                {

                 //参数使用”,”分隔

                    string[] args = Arguments.Split(",".ToCharArray());

                    ParameterInfo[] paras = method.GetParameters();

                    object[] argument = new object[paras.Length];

                    for (int i = 0; i < argument.Length; i++)

                    {

                        if (i < args.Length)

                        {

                         //因为XmlHttp传递过来的参数全部时String类型,所以必须进行转换

                         //这里只将参数转换为Int32,并不做其他考虑。

                            argument[i] = Convert.ToInt32(args[i]);

                        }

                    }

                    object value = method.Invoke(Activator.CreateInstance(type,

     true), argument);

                    if (value != null)

                        context.Response.Write(value.ToString());

                    else

                        context.Response.Write("error");

                }

               //处理结束

                context.Response.End();

         }

     

    2.   一段Javascript代码:

    function CallMethod(AssemblyName,MethodName,Argus){

           var args = "";

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

                args += Argus[i] + ",";

           if(args.length>0)

            args = args.substr(0,args.length-1);

            var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');

            url = "AJAX/AJAX.czhenq?as=" +AssemblyName + "&me=" + MethodName +"&ar="

    + args;

            xmlhttp.open("POST",url,false);

            xmlhttp.send();

            alert(xmlhttp.responseText);

    }

    一个简单的AJAX框架已经实现。现在写段代码来测试.

    1.新建一个网站,并应用刚才你编写的HttpHandler。并在网站的Web.config中注册你的HttpHandler,说明那些请求将使用你编写的Handler来处理。下面的内容说明:所有以“czq”结尾的请求,都将使用“Czhenq.HttpHandlerFactory”来处理。

        <httpHandlers>

    <addverb="POST,GET"path="*.czq"type="Czhenq.HttpHandlerFactory,

             Czhenq.AJAX"/>

        </httpHandlers>

    2.添加一个web页面,将刚才的脚本拷贝到页面中,并添加一个你要调用的方法。

    private string Add(int i, int j)

    {

        return TextBox1.Text;

    }

    3.在页面中放置一个HiddenField控件,命名为AssemblyName并在Page_Load中添加如下代码:

    string assemblyName = Czhenq.AJAX.Class1.Encode(typeof(_Default

    ).AssemblyQualifiedName);

    AssemblyName.Value = assemblyName;

    4.页面中添加如下脚本:

    var assemblyName = document.getElementById(AssemblyName)

    var argus = new Array();

    argus.push(100)

    argus.push(200);

    CallMethod(assemblyName,”Add”,argus);

  • 相关阅读:
    初级Linux学习指南
    2016/09/29 SQL中的join
    2016/09/27 Hadoop Yarn
    2016/06/27 HDFS概述
    2016/09/26 电能和电功率
    【转】2016/09/22 MapReduce初级案例
    2016/09/22 mapreduce
    2016/09/21 java关键字static
    2016/09/21 Java关键字final
    2016/09/21 java split用法
  • 原文地址:https://www.cnblogs.com/seerlin/p/1187133.html
Copyright © 2020-2023  润新知