zoukankan      html  css  js  c++  java
  • ajax-异步JavaScript和XML

    什么是ajax?

      ajax是异步的javascript和XML ( Asynchronous Javascript And XML )
      优点:节省用户操作时间,提高用户体验。减少数据请求次数。

    什么是异步?同步?

      异步是非阻塞模式,前面的代码不会影响后面代码执行。
      同步是阻塞模式,要前面的执行后再执行后面的。

    ajax请求后台数据流程

      1 创建 ajax 对象
    var xhr=new XMLHttpRequest();
      兼容ie低版本:
    if(window.XMLHttpRequest){
      xhr=new XMLHttpRequest();
    }else{
      //ie低版本
      xhr=new ActiveXObject('Microsoft.XMLHTTP');
    }
      2 创建请求
      调用open方法。
    xhr.open()
      open方法有三个参数。
    
      第一个: 提交方式(method) ,一般有两种。 get 和 post 。
      第二个: 请求地址url。
      第三个: 异步还是同步。 true 和 false 。 默认为 true ,异步。
    xhr.open('get','1.txt','true')
      3 发送请求
      相当于表单 form 中的 submit 。
      调用 send() 方法。
    xhr.send();
      4 判断 ajax 状态
    //当状态发生改变
    xhr.onreadystatechange=function(){
      //如果是所需状态
      if(xhr.readyState==4){
        alert(xhr.responseText) //弹出请求到的文本数据
      }
    }
      onreadystate 当ajax状态发生改变的时候
      readystate 状态:
        0 ajax对象已创建。
        1 开始调用 send 方法,发送数据。
        2 数据已返回,但没有解析。
        3 表示数据正在解析中。
        4 表示所有工作已经完成,可以调用数据了。

    例:通过ajax请求txt中的文本

      1. 搭建本地服务器环境。
      2. 创建文件 1.txt ,内容:“txt中的文本”
      3. 创建文件 index.html ,js内容:
    //1 创建 ajax 对象
    var xhr=new XMLHttpRequest();
    //2 创建请求
    xhr.open('get','1.txt','true')
    //3 发送请求
    xhr.send();
    //4 判断状态
    xhr.onreadystatechange=function(){
      if(xhr.readyState==4){
        alert(xhr.responseText)
      }
    }
      4. 访问 127.0.0.1 。
    
      还可以同时判断服务器状态码: status==200 表示所请求的文档已找到并正常返回。
    if(xhr.readyState==4&&xhr.status==200){
      alert(xhr.responseText)
    }

    服务器状态码

      200 ok 请求的文档已经找到并正确返回。
      304 not modified 拥有一个本地缓存副本,服务端内容与其相同。
      403 Forbidden 请求者对所请求的文档不具备相应权限。
      404 notfound 所请求的文档没有找到。

    get与post的区别

      post
        统一把数据放在页面的请求头中。
        理论上 post 携带的数据没有限制(但是服务器一般有限制)。
      get
        统一把数据放在url?的后面。
        get 方式提交的数据长度有限制,因为 url 长度有限制,数据量根据浏览器不同。
    
      相同点:
        把数据名和数据值用等号(=)连接,多组数据用和号(&)连接。
    
      不同点:
        与 post 相比, get 方式简单、快速,大部分情况下能用。
        以下几种使用post请求:
        1. 向服务器发送大量数据;
        2. 向服务器发送未知字符的用户输入时,post更加可靠。(不知道用户会输入什么的时候)

    例:通过get发送和接收数据

      get.php 文件中的内容:
    <?php
      header('content-type:text/html,charset="utf-8"');
      error_reporting(0);
     
      $username=$_GET['username'];
      $age=$_GET['age'];
     
      echo "您的姓名是:{$username},年龄是{$age}";

    普通方式发送和接收数据:



    index.html 文件中的内容:
        <!--
        Author: XiaoWen
        Create a file: 2016-12-28 13:51:39
        Last modified: 2017-01-04 18:40:25
        Start to work:
        Finish the work:
        Other information:
        -->
        <!DOCTYPE html>
        <html lang="en">
        <head>
          <meta charset="UTF-8">
          <title>ajax</title>
        </head>
        <body>
          <form action="get.php" method="get" >
            姓名: <input type="text" name="username"/>
            年龄: <input type="text" name="age"/>
            <input type="submit" value="提交" />
          </form>
        </body>
        </html>
      当点击提交后,页面的url跳转并变成:
      http://127.0.0.1/get.php?username=小文&age=21
    
      get发送的数据是拼接在url中的。
    
      可以看出:
      get.php?
      1 请求文件的后面以问号(?)拼接:
      username=小文&age=21
      2 数据以 name属性=value值 的方式拼接,多个数据用和号(&)接连:
    
      上面是普通的提交方式,提交时页面url会改变会跳转。
      那么,使用 ajax 是这样的:
      其实也就是 不使用html标签来发送请求,而是使用js来拼接出url,使用 ajax 来发送和接收数据

    ajax发送和接收数据:






    index.html 文件中的内容:

        <!--
        Author: XiaoWen
        Create a file: 2016-12-28 13:51:39
        Last modified: 2017-01-04 18:40:36
        Start to work:
        Finish the work:
        Other information:
        -->
        <!DOCTYPE html>
        <html lang="en">
        <head>
          <meta charset="UTF-8">
          <title>ajax</title>
        </head>
        <body>
          <!-- <form action="get.php" method="get" > -->
          姓名: <input type="text" name="username"/>
          年龄: <input type="text" name="age"/>
          <input type="submit" value="提交" />
          <!-- </form> -->
        </body>
        <script>
          var input=document.getElementsByTagName('input');
          var str;
          input[2].onclick=function(){
            //http://127.0.0.1/get.php?username=小文&age=21
            str='get.php?'+input[0].name+'='+input[0].value+'&'+input[1].name+'='+input[1].value;
            var xhr=new XMLHttpRequest()
            xhr.open('get',str,true)
            xhr.send()
            xhr.onreadystatechange=function(){
              if(xhr.readyState==4){
                console.log(xhr.responseText)
              }
            }
          }
        </script>
        </html>

    state 和 status

      state 已知的

      status 不确定的

      例:

      readyState 值一般就5个
      statusText 可以任意的文字
      onreadystatechange 值一般就5个
      window.status 可以任意的文字

  • 相关阅读:
    Longest Valid Parentheses
    Gas Station
    Multiply Strings
    LeetCode:Merge Sorted Array
    LeetCode:Single Number II
    LeetCode: Single Number
    LeetCode:3Sum
    LeetCode:Binary Tree Preorder Traversal
    LeetCode: Best Time to Buy and Sell Stock III
    LeetCode: Best Time to Buy and Sell Stock II
  • 原文地址:https://www.cnblogs.com/daysme/p/6249794.html
Copyright © 2011-2022 走看看