zoukankan      html  css  js  c++  java
  • 初步了解 Ajax

    ajax的基本组成

      Xhtml css

      javascript

      xml

      XMLHttpRequest (核心,ajax引擎,异步交互的对象)

    ajax使用的基本步骤:

     1、初始化ajax引擎    readyState=0(刚建立)

     2、封装url(设定要请求的路径)

     3、打开ajax引擎(同步方式、异步的方式;本次传输使用get还是post) readyState = 1

     4、将要请求的信息通过引擎发送到服务器进行处理 readyState =2

     5、监听服务器返回给ajax引擎的处理状态   readyState =3 、4

     6、判断是否交互完毕,如果交互完毕则取出返回的数据

    ajax 的中文乱码问题

    可以使用encodeURI进行编码

    可以使用decodeURI()进行解码

    ajax请求部分封装重用的问题

    为什么要进行封装?

    1、使用ajax有6步,每次都写这6步比较麻烦?
    2、代码的重复利用率很低,页面非常乱

    解决办法:就是封装  重用

    ajax解析xml的思路是

       1、服务端是xml或者输出xml格式的服务器文件
       2、客户端可以使用xhr.responseXML的方式获取整个xml根节点
       3、通过js dom 的document.getElementsByTagName()
          来解析想获取的元素节点
       4、通过获得元素节点及子节点的方式,得到更多的内容。

    _________________ajaxUtil.js__________________________________

    function get(url1,params,methodName){
      /*
     ajax使用的基本步骤:

     1、初始化ajax引擎
     2、封装url(设定要请求的路径)
     3、打开ajax引擎(同步方式、异步的方式;本次传输使用get还是post)
     4、将要请求的信息通过引擎发送到服务器进行处理
     5、监听服务器返回给ajax引擎的处理状态
     6、判断是否交互完毕,如果交互完毕则取出返回的数
      */ 
      //初始化ajax引擎
      var xhr = new XMLHttpRequest();//这种方式只针对ie浏览器,并且ie6以下还有问题。
      var url=url1+"?"+params+"&r="+Math.random();

      //alert(url);
      //打开引擎
      xhr.open("get",url,true);   //readyState=1
     
      //发送请求
      xhr.send(null);   //readyState=2
     
      //监听readyState值的改变,每次改变都会执行下面额函数 
      xhr.onreadystatechange=function (){
      
       //如果等于4,表明交互完毕 ,我们可以取出服务器返回的内容
       if(xhr.readyState==4){
               
     //动态调用方法,为什么说是动态呢?方法的名称是个变量methodName
       methodName(xhr);
       
       }
      
      }

    }

    //$$()方法用于方便取出 id="id" 的对象
    function $$(id){
     
     return document.getElementById(id);
    }

    ______________ajax-xml.html______________________________________

    <style>
     #div{
      background-color:#CCC;
      300px;
      height:150px;
     
      }
    </style>
    <script language="javascript" src="http://www.cnblogs.com/include/ajaxUtil.js"></script>

    <script>
    //定义两个行数
     function getXml(){
        //定义url
     var url="ajax-xml.xml";
     //定义参数
     var params="a="+1; 
     //调用ajax
     get(url,params,processXmlData);
     }

    function processXmlData(xhr){
        //接收返回的数据
        var reText=xhr.responseXML;

     //解析xml并且显示到表格里
     var emplist=reText.getElementsByTagName("emp");
     var table=document.createElement("table");
         table.setAttribute("border","1");
     //遍历解析每个emp标签
     for(var i=0;i<emplist.length;i++){
        var tr=document.createElement("tr");
      var childs=emplist[i].childNodes;
      //alert(i+"子节点个数:"+childs.length);
      for(var j=0;j<childs.length;j++){
        if(childs[j].nodeType==1){
        //创建列
        var td=document.createElement("td");
        //创建文本节点
        var text=document.createTextNode(childs[j].firstChild.nodeValue);
        //将文本追加到td中
        td.appendChild(text);
        //将td追加到行中
        tr.appendChild(td);
        }
       }
            //将tr追加到表格中
         table.appendChild(tr);    
     }
     //将table追加到div中
     $$("div").appendChild(table);
    }
    getXml();
    </script>
    </head>

    <body>
    <div id="div"></div>

    参照的是: http://blog.csdn.net/lvzk555/article/details/7319396

    还有个贴吧:http://bbs.bccn.net/thread-350246-1-1.html

  • 相关阅读:
    oracle 导入数据时提示只有 DBA 才能导入由其他 DBA 导出的文件
    oracle 常用语句
    android udp 无法收到数据 (模拟器中)
    android DatagramSocket send 发送数据出错
    AtCoder ABC 128E Roadwork
    AtCoder ABC 128D equeue
    AtCoder ABC 127F Absolute Minima
    AtCoder ABC 127E Cell Distance
    CodeForces 1166E The LCMs Must be Large
    CodeForces 1166D Cute Sequences
  • 原文地址:https://www.cnblogs.com/sailormoon/p/2843784.html
Copyright © 2011-2022 走看看