• AJAX(Asynchronous JavaScript and XML)学习笔记


    基本概念:

    1.AJAX不是一种新的编程语言,而是一种使用现有标准的新方法。

    2.AJAX最大的优点是在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容,用于创建快速动态网页(传统网页如果需要更新内容,必须重新加载整个页面)。

    3.AJAX不需要任何浏览器插件,只需要允许JavaScript在浏览器上运行。

    4.AJAX的应用实例:新浪微博,谷歌地图,谷歌搜索建议

    创建XMLHttpRequest对象:

    重点:

    1.XMLHttpRequest是AJAX的基础。

    2.创建XMLHttpRequest对象的语法:

     1 var xmlhttp;
     2 //为了应对所有的现代浏览器,包括 IE5 和 IE6,检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject :
     3 if (window.XMLHttpRequest)
     4 {
     5     //IE7+, Firefox, Chrome, Opera, Safari浏览器
     6     xmlhttp=new XMLHttpRequest();    
     7 }
     8 else
     9 {
    10     // IE6, IE5 浏览器执行代码
    11     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    12 }

    向服务器发送请求:

    重点:

    1.XMLHttpRequest对象用于和服务器交换数据

    2.语法:

    1 xmlhttp.open("GET","ajax_info.txt",true);
    2 xmlhttp.send();

    3.与POST相比,GET更快更简单,大部分情况适用,只有三种情况要使用POST:

    • 无法使用缓存文件(更新服务器上的文件或者数据库)

    • 向服务器发送大量数据(POST没有数据量的限制)

    • 发送包含未知字符的用户输入时,POST更稳定可靠

    4.如果使用POST请求,需要使用setRequestHeader()来添加HTTP头,然后在send()方法中规定想要发送的数据。

    1 xmlhttp.open("POST","/try/ajax/demo_post2.php",true);
    2 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    3 xmlhttp.send("fname=Henry&lname=Ford");

    5.open()方法中的URL是服务器上文件的地址,该文件可以是任何类型,比如.txt和.xml,或者服务器脚本文件,.asp/.php,只要在传回响应之前能够在服务器上执行任务。

    6.Async一般设置为true,这样JavaScript可以在等待服务器响应时执行其他脚本,并且在响应就绪后对响应进行处理。此时要规定响应处于onreadystatechange事件中的就绪状态时执行的的函数:

    1 xmlhttp.onreadystatechange=function()
    2 {
    3     if (xmlhttp.readyState==4 && xmlhttp.status==200)
    4     {
    5         document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    6     }
    7 }
    8 xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
    9 xmlhttp.send();

    对于一些小型请求,可以设置为false,此时不用编写onreadystatechange函数,把代码放到send()函数后面就行:

    1 xmlhttp.open("GET","/try/ajax/ajax_info.txt",false);
    2 xmlhttp.send();
    3 document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

    服务器响应:

    重点:

    1.如果需要获得响应,需要使用 XMLHttpRequest 对象的两个属性,responseText或者responseXML:

    2.如果来自服务器的响应不是XML,就使用responseText:

    1 document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

    3.如果是XML,需要对XML对象进行解析:

    1 xmlDoc=xmlhttp.responseXML;
    2 txt="";
    3 x=xmlDoc.getElementsByTagName("ARTIST");
    4 for (i=0;i<x.length;i++)
    5 {
    6     txt=txt + x[i].childNodes[0].nodeValue + "<br>";
    7 }
    8 document.getElementById("myDiv").innerHTML=txt;

    onreadystatechange事件

    重点:

    1.XMLHttpRequest对象的三个属性:

    当请求被发送到服务器时,我们会基于服务器的响应执行响应的任务。

    每当readyState改变时,会触发onreadystatechange事件。

    readyState会储存XMLHttpRequest的状态信息。

    在上述条件中,onreadystatechange事件会被触发5次。

    2.使用回调函数:

    回调函数是一种以参数形式传递给另一个函数的函数。

    如果网站上有多个AJAX任务,应为XMLHttpRequest对象编写回调函数,在每次使用AJAX时调用。

    应包含URL以及每次发生onreadystatechange时执行的任务:

     1 var xmlhttp;
     2 function loadXMLDoc(url,cfunc)
     3 {
     4 if (window.XMLHttpRequest)
     5   {// IE7+, Firefox, Chrome, Opera, Safari 代码
     6   xmlhttp=new XMLHttpRequest();
     7   }
     8 else
     9   {// IE6, IE5 代码
    10   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    11   }
    12 xmlhttp.onreadystatechange=cfunc;
    13 xmlhttp.open("GET",url,true);
    14 xmlhttp.send();
    15 }
    16 
    17 function myFunction()
    18 {
    19     //loadXMLDoc()函数储存XML内容
    20     loadXMLDoc("/try/ajax/ajax_info.txt",function()    
    21     {
    22         if (xmlhttp.readyState==4 && xmlhttp.status==200)
    23         {
    24             document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    25         }
    26     });
    27 }

    ASP/PHP实例:

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <script>
     6 function showHint(str)
     7 {
     8   var xmlhttp;
     9   if (str.length==0)
    10   { 
    11     document.getElementById("txtHint").innerHTML="";
    12     return;
    13   }
    14   if (window.XMLHttpRequest)
    15   {
    16     // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    17     xmlhttp=new XMLHttpRequest();
    18   }
    19   else
    20   {
    21     // IE6, IE5 浏览器执行代码
    22     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    23   }
    24   xmlhttp.onreadystatechange=function()
    25   {
    26     if (xmlhttp.readyState==4 && xmlhttp.status==200)
    27     {
    28       document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    29     }
    30   }
    31   xmlhttp.open("GET","/try/ajax/gethint.php?q="+str,true);
    32   xmlhttp.send();
    33 }
    34 </script>
    35 </head>
    36 <body>
    37 
    38 <h3>在输入框中尝试输入字母 a:</h3>
    39 <form action=""> 
    40 输入姓名: <input type="text" id="txt1" onkeyup="showHint(this.value)" />
    41 </form>
    42 <p>提示信息: <span id="txtHint"></span></p> 
    43 
    44 </body>
    45 </html>

    1.如果表单中没有输入str.length == 0,则清空txtHint占位符的内容,并退出。

    2.如果表单中有内容,onkeyup时间会触发showHint函数,创建XMLHttpRequest对象,当服务器响应就绪时执行函数,最后把请求发送到服务器上的文件。

  • 相关阅读:
    [翻译] JSAnimatedImagesView
    css3 :nth-child 常用用法
    设置屏幕亮度(系统级别和应用级别)
    nodejs 改变全局前缀
    MongoDB数据库和集合的状态信息
    NoSQL架构实践(一)——以NoSQL为辅
    socket.io,系统api,
    svn sc create 命令行创建服务自启动
    background-size background-positon合并的写法
    【转】视频编码与封装方式详解
  • 原文地址:https://www.cnblogs.com/annika/p/8471674.html
Copyright © 2020-2023  润新知