• ajax 学习笔记


    Ajax=异步javascript 和 xml

    Ajax 是一种用于创建快速动态页面的技术

    XmlHttpRequest是ajax的基础

    所有现代浏览器均支持xmlhttprequest对象 (IE5和IE6使用ActiveXObject).

    xmlhttprequest用于在后台与服务器交换数据。这意味着可以在不重新加载整个页面的情况下,对页面的某部分进行更新。

    为了对应所有的浏览器,创建xmlhttprequest:

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

    向服务器发送请求:

    如果需要向服务器发送请求,使用XMLHttpRequest对象的open()和send()方法

    xmlhttp.open("GET","test1.txt",true);
    xmlhttp.send();
    方法                                          描述
    open(method,url,async)              规定请求的类型、URL 以及是否异步处理请求。
                                     method:请求的类型;GET 或 POST
                                                     url:文件在服务器上的位置
                                     asynctrue(异步)或 false(同步)
    
    send(string)                                       将请求发送到服务器。
                                     string:仅用于 POST 请求

    Get  还是 Post?

    与post 相比 简单也更快,并且在大多数情况下也都能用。

    然而,在以下情况下,请使用post:

    1.无法使用缓存文件(更新服务器上的文件和数据库)

    2.向服务器发送大量数据(post没有数据限制)

    3.发送包含未知字符的用户输入时,post比get更稳定也更可靠

    get 请求
    xmlhttp.open("GET","demo_get.asp?t=" + Math.random(),true);
    xmlhttp.send();
    
    POST 请求
    一个简单 POST 请求
    xmlhttp.open("POST","demo_post.asp",true);
    xmlhttp.send();
    
    如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:
    
    xmlhttp.open("POST","ajax_test.asp",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("fname=Bill&lname=Gates");

    javascript 会等到服务器响应就绪才继续执行。如果服务器繁忙或者缓慢,应用程序会挂起或停止

    通过ajax,javascript无需等待服务器的响应,而是:

    1.在等待服务器响应时执行其他脚本

    2.在响应就绪后对响应进行处理

    Async=true

    当使用async=true时,请规定响应处于onreadystatechange事件中的就绪状态时执行的函数

    xmlhttp.onreadystatechange=function(){
    
    if(xmlhttp.readyState==4&&xmlhttp.status==200){
    
      document.getElementId("mydiv").innerHTML=xmlhttp.responseText;
    
    }
    
    }
    
    xmlhttp.open("GET","text1.txt",true);
    
    xmlhttp.send();

    Async=false

    如果async=false不需要使用onreadystatechange函数 把代码放到send()语句后面即可

    xmlhttp.open("GET","text.txt",false);
    xmlhttp.send();
    document.getElmentId("mydiv" ).innerHTML=xmlhttp.responseText;

    如果需要获得服务器的响应,请使用xmlHttpReqpest对象的responseText或responseXML属性
    请求boox.xml文件,并解析响应:

    xmlDoc=xmlhttp.responseXML;
    txt="";
    x=xmlDoc.getElementByTagName("Artist");
    for(i=0;i<x.length;i++)
    {
       txt=txt+x[i].childNodes[0].nodeValue+"<br>";
    }
    document.getElementById("mydiv").innerHtml=txt;
    

      

    Ajax  事件

    xmlhttprequest对象的三个重要的属性:

    onreadystatechange                          存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
    
    readyState                                          存有 XMLHttpRequest 的状态。从 04 发生变化。
    0: 请求未初始化
    1: 服务器连接已建立
    2: 请求已接收
    3: 请求处理中
    4: 请求已完成,且响应已就绪
    
    status                                                   200: "OK"
    404: 未找到页面

    当 readyState 等于 4 且状态为 200 时,表示响应已就绪

    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
      }

    CallBack函数 (回调函数)

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

    如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。

    该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同):

    function myFunction()
    {
    loadXMLDoc("ajax_info.txt",function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
      });
    }
  • 相关阅读:
    stylelint 安装配置
    使用 jest 测试 react component 的配置,踩坑。
    互联网媒体类型 MIME Type
    react-router 父子路由同时要接收 params 的写法
    fixed 相对于父容器定位
    react 点击空白处隐藏弹出层
    canvas 使用 isPointInPath() 判断鼠标位置是否在绘制的元素上
    JavaScript 缓存基本原理
    简单说明 Virtual DOM 为啥快
    通过阻止 touchstart 事件,解决移动端的 BUG
  • 原文地址:https://www.cnblogs.com/douqiumiao/p/3120861.html
Copyright © 2020-2023  润新知