• Ajax 学习笔记(1)


    技术的核心是采用XmlHttp来请求和接收回应。XmlHttp只是一种技术规范,具体的实现上IE和Firefox有所不同,IE是用ActiveX方式,而Firefox是内置实现的。

    IE下创建XmlHttp对象:
    A=new ActiveXObject('Msxml2.XMLHTTP');

    Firefox下创建XmlHttp对象:
    A=new XMLHttpRequest();

    还可以用下面的写法,可以比较好的兼容IE和Firefox:
    function createXH(){
    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
    }

    创建好XmlHttp之后,接下来就是发送请求和接收回应:
    var xmlhttp=createXH();
    xmlhttp.open('POST', 'Message/CheckNew.aspx', false);
    false - 表示发送消息之后一直等待回应(即同步执行的方式);
    true - 表示发送消息之后不等待回应,继续执行下一步(即异步执行的方式);

    下面是同步执行的代码写法:
    xmlhttp.open('POST', 'Message/CheckNew.aspx', false);
    xmlhttp.send(''); // 这里也可以在请求时发送一些数据,如果没有数据,也要发个空数据
    var rt=xmlhttp.responseText;
    // rt 就是接受回应的数据,接下来就是客户端对rt进行分析处理

    同步执行的写法一般情况最好不要用,因为如果请求的服务器端半天不回应或者网络不太稳定的情况下,浏览器会一直等待回应,而且在等待期间浏览器几乎死掉,CPU占用接近100%!
    用异步执行的方式就可以避免这个问题,如下:
    var xmlhttp = createXH();
    function checkNewMessages(){
     xmlhttp.open('POST', 'Message/CheckNew.aspx', true);
     xmlhttp.onreadystatechange=continue;
     xmlhttp.send('');
    }
    function continue(){
     if(xmlhttp.readyState==4){
     var rt = xmlhttp.responseText;
    }
    }

    xmlHttp.responseText返回的字符串,如何处理这些字符串?一些Ajax框架对这个处理过程进行了封装,增加很多种数据类型,甚至还可以处理DataSet。如果不想用这些框架,也可以使用简单类型,如请求时将请求数据格式化为Xml方式(便于服务器端的Aspx处理),而返回结果则写成javascript的数组表达式形式(方便客户端进行处理)。

    如:
    发送时
    var xml='<message><receiver>kathy</receiver><content>message context!</content></message>';
    ...
    xmlhttp.send(xml);
    接收时服务器端返回的字符串为:
    ['rrooyy','2005-05-01 08:22:12','See you!']
    var rt=xmlhttp.responseText;
    var msg=eval(rt);
    然后就可以按照数组方式对数据进行处理了;

  • 相关阅读:
    设计模式--抽象工厂(个人笔记)
    C#中Trim()、TrimStart()、TrimEnd()的用法
    C#中String类的几个方法(IndexOf、LastIndexOf、Substring)
    枚举、字符串、值之间的转换
    C# 获取文件名、目录、后缀、无后缀文件名、扩展名、根目录等
    向服务器发送Post或Get请求(封装好的)
    未能加载文件或程序集“AspNetPager”或它的某一个依赖项。参数错误。 (异常来自 HRESULT:0x80070057 (E_INVALIDARG))
    Hibernate实现向数据库插入一条数据全过程(Study By Example)
    es6 模块化
    css3 属性认识
  • 原文地址:https://www.cnblogs.com/rrooyy/p/219349.html
Copyright © 2020-2023  润新知