热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ajax.NET基础教程

AJAX技术的风起云涌,也使得B/S应用的表现力日益增强,大有逐步吞食C/S领地之势。利用Ajax.Net,你可以从JavaScript客户调用.NET方法。首先下载Ajax.Net,你可以从http://www.ajaxpro.info/获得。最新版本是6.4.15.1,下载解压后的文件夹中有个AjaxPro.dll
 AJAX技术的风起云涌,也使得B/S应用的表现力日益增强,大有逐步吞食C/S领地之势。利用Ajax.Net,你可以从Javascript客户调用.NET方法。    
首先下载Ajax.Net,你可以从http://www.ajaxpro.info/获得。最新版本是6.4.15.1,下载解压后的文件夹中有个AjaxPro.dll,就是它了。使用VS2005新建web项目,并添加对AjaxPro.dll的引用,然后在Web配置文件中添加:

        
            
        

这个配置项表明所有的ajaxpro/*.ashx请求(即从客户发送的Ajax请求)都交给AjaxPro.AjaxHandlerFactory处理,而不是由默认的System.Web.UI.PageHandlerFactory来处理。 
新建的web项目有个默认的_Default页面,我们为其加上命名空间如MyAjaxNetTest,然后在_Default的HTML第一句也要加上这个名目空间:

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

    然后在PageLoad中注册本页面到AjaxPro中:

        protected void Page_Load(object sender, EventArgs e)
        {
            AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default)); 
        }

    测试一
一切已经准备就绪了,我们先进行第一个测试,从客户调用服务端的简单方法。首先在_Default类中添加方法:

         [AjaxPro.AjaxMethod]
        public string GetServerTime()
        {
            return DateTime.Now.ToString();
        }

    客户现在可以在JS中调用这个方法了,如

       

    然后你可以加个HTML的button,onclick处理函数设为getTime()。

测试二:    
    为GetServerTime方法添加static修饰,测试仍然成功!

    测试三: 
简单方法调用已经OK了,GetServerTime方法返回的是一个简单的string,那么服务端可不可以返回稍微复杂一点的对象了?我们来试试。先新建一个Student类:

     public class Student
    {
        public string Name = "sky" ;
        public int     Age = 26;
    }

    服务端添加GetStudent方法:

        [AjaxPro.AjaxMethod]
        public Student GetStudent()
        {
            return new Student();
        }

    对应的,客户端添加调用:

       function getStudent()
       {
         var stu = MyAjaxNetTest._Default.GetStudent().value ;
         alert(stu.Name + " " + stu.Age) ;
       }

依照前面的加个HTML按钮测试getStudent函数,答案是,一切照我们预料的进行,客户js可以访问服务端返回的对象。

    测试四

    最后看看能够在客户端提交对象给服务器,先在服务端添加方法:

1         private Student student = null;
2         [AjaxPro.AjaxMethod]
3         public void SetStudent(Student stu)
4         {
5             this.student = stu;
6             string name = this.student.Name;
7         }

    可以在第六行添加断点,然后当客户端调用时,会进入该断点。

    客户端添加调用:

     function putStudent()
       {
            var stu = MyAjaxNetTest._Default.GetStudent().value ;
            stu.Name = "chenqi" ;
            MyDemo._Default.SetStudent(stu) ;
       }

同样,当调用putStudent这个js方法时,服务端进入断点已经表明客户成功的提交了对象,并且对象的Name字段已经改变为“chenqi”了。

    测试五
前面客户设置的都是Student的public字段,那么访问属性如何了?我们将Student定义更改如下:

     public class Student
    {
        private string name = "sky" ;
        public int Age = 26; public string Name
        {
            get
            {
                return this.name;
            }
            set
            {
                this.name = value;
            }
        }
    }     再重复前面的测试,结果我想已经在你的料想中了。

    单从前面的几个小测试,我已经发现了使用Ajax.Net的方便与迅捷,看来B/S开发不再像我以前感受的那样繁琐了。

备忘录:Ajax基础
(1)创建XmlHttpRequest对象

var xmlHttp ;
            function createXMLHttpRequest()
            {
                if(window.ActiveXObject)
                {
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") ;
                }
                else if(window.XMLHttpRequest)
                {
                    xmlHttp = new XMLHttpRequest() ;
                }                
            }

(2)POST Ajax请求

function startRequest()
            {
                createXMLHttpRequest() ;
                xmlHttp.onreadystatechange = handleStateChangeComplex ;
                xmlHttp.open("POST" ,"WebForm1.aspx?timeStamp="+ new Date().getTime(),true) ;
                xmlHttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded") ;
                xmlHttp.send("ID=中国123") ;
            }        

    服务端可以通过QueryString获取xmlHttp.send方法传递的参数。

(3)处理异步结果

function handleStateChangeComplex()
            {
                if(xmlHttp.readyState == 4)
                {
                    if(xmlHttp.status == 200)
                    {
                        document.getElementById("results").innerText = xmlHttp.responseText ;
                    }
                }
            }


推荐阅读
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
  • 本文详细探讨了JavaScript中的闭包与柯里化技术,这两者是函数式编程的重要组成部分,对提升代码的灵活性和可维护性具有重要作用。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 本文详细介绍了如何利用Go语言和WebSockets技术构建一个高效的实时聊天系统。随着网络应用的日益复杂化,实时交互成为了提升用户体验的关键要素之一。通过本指南,开发者可以学习到最新的技术和最佳实践。 ... [详细]
  • 理解文档对象模型(DOM)
    本文介绍了文档对象模型(DOM)的基本概念,包括其作为HTML文档的节点树结构,以及如何通过JavaScript操作DOM来实现网页的动态交互。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ... [详细]
  • 本文将介绍如何利用Python爬虫技术抓取国内主流在线学习平台的数据,并以51CTO学院为例,进行详细的技术解析和实践操作。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
  • AJAX技术允许网页在不重新加载整个页面的情况下进行异步更新,通过向服务器发送请求并接收JSON格式的数据,实现局部内容的动态刷新。 ... [详细]
author-avatar
xuyang200788
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有