• Ajax详解


    浏览器与服务器之间,采用 HTTP 协议通信。用户在浏览器地址栏键入一个网址,或者通过网页表单向服务器提交内容,这时浏览器就会向服务器发出 HTTP 请求。

     JavaScript 脚本发起 HTTP 通信,就叫做 AJAX 通信

    AJAX 包括以下几个步骤。

    1. 创建 XMLHttpRequest 实例
    2. 发出 HTTP 请求
    3. 接收服务器传回的数据
    4. 更新网页数据

    AJAX 通过原生的XMLHttpRequest对象发出 HTTP 请求,得到服务器返回的数据后,再进行处理。

    XMLHttpRequest对象是 AJAX 的主要接口,用于浏览器与服务器之间的通信。尽管名字里面有XMLHttp,它实际上可以使用多种协议(比如fileftp),发送任何格式的数据(包括字符串和二进制)。

    XMLHttpRequest对象简单用法的完整例var xhr = new XMLHttpRequest(); //XMLHttpRequest本身是一个构造函数,可以使用new命令生成实例。它没有任何参数。

    
    
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function(){     //一旦XMLHttpRequest实例的状态发生变化,就会调用监听函数
      // 通信成功时,状态值为4
      if (xhr.readyState === 4){
        if (xhr.status === 200){
          console.log(xhr.responseText);
        } else {
          console.error(xhr.statusText);
        }
      }else{
        // 显示提示“加载中……”  //此处可做loading处理
     }
    };
    
    xhr.onerror = function (e) {
      console.error(xhr.statusText);
    };
    
    xhr.open('GET', '/endpoint', true);    //一旦新建实例,就可以使用open()方法指定 HTTP 请求参数
    xhr.send(null);    //实际发出HTTP请求

    一旦拿到服务器返回的数据,AJAX 不会刷新整个网页,而是只更新网页里面的相关部分,从而不打断用户正在做的事情。

    注意,AJAX 只能向同源网址(协议、域名、端口都相同)发出 HTTP 请求,如果发出跨域请求,就会报错。

    (1)、XMLHttpRequest.onreadystatechange属性指向一个监听函数。readystatechange事件发生时(实例的readyState属性变化),就会执行这个属性。

    (2)、XMLHttpRequest.readyState返回一个整数,表示实例对象的当前状态。该属性只读。它可能返回以下值

    • 0,表示 XMLHttpRequest 实例已经生成,但是实例的open()方法还没有被调用。
    • 1,表示open()方法已经调用,但是实例的send()方法还没有调用,仍然可以使用实例的setRequestHeader()方法,设定 HTTP 请求的头信息。
    • 2,表示实例的send()方法已经调用,并且服务器返回的头信息和状态码已经收到。
    • 3,表示正在接收服务器传来的数据体(body 部分)。这时,如果实例的responseType属性等于text或者空字符串,responseText属性就会包含已经收到的部分信息。
    • 4,表示服务器返回的数据已经完全接收,或者本次接收已经失败。

      通信过程中,每当实例对象发生状态变化,它的readyState属性的值就会改变。这个值每一次变化,都会触发readyStateChange事件。

    (3)、XMLHttpRequest.status属性返回一个整数,表示服务器回应的 HTTP 状态码。一般来说,如果通信成功的话,这个状态码是200;如果服务器没有返回状态码,那么这个属性默认是200。请求发出之前,该属性为0。该属性只读。

    • 200, OK,访问正常
    • 301, Moved Permanently,永久移动
    • 302, Moved temporarily,暂时移动
    • 304, Not Modified,未修改
    • 307, Temporary Redirect,暂时重定向
    • 401, Unauthorized,未授权
    • 403, Forbidden,禁止访问
    • 404, Not Found,未发现指定网址
    • 500, Internal Server Error,服务器发生错误

    基本上,只有2xx和304的状态码,表示服务器返回是正常状态。

    XMLHttpRequest.timeout,XMLHttpRequestEventTarget.ontimeout

    XMLHttpRequest.timeout属性返回一个整数,表示多少毫秒后,如果请求仍然没有得到结果,就会自动终止。如果该属性等于0,就表示没有时间限制。

    XMLHttpRequestEventTarget.ontimeout属性用于设置一个监听函数,如果发生 timeout 事件,就会执行这个监听函数。

    var xhr = new XMLHttpRequest();
    var url = '/server';
    
    xhr.ontimeout = function () {
      console.error('The request for ' + url + ' timed out.');
    };
    
    xhr.onload = function() {
      if (xhr.readyState === 4) {
        if (xhr.status === 200) {
          // 处理服务器返回的数据
        } else {
          console.error(xhr.statusText);
        }
      }
    };
    
    xhr.open('GET', url, true);
    // 指定 10 秒钟超时
    xhr.timeout = 10 * 1000;
    xhr.send(null);
  • 相关阅读:
    day_2:re
    day_1:Requests
    CTF-PHP漏洞总结(持续更新)
    BugkuCTF-Web- flag在index里 80
    中缀表达式转换为后缀表达式(C语言实现)
    逆波兰计算器1.0 (c语言 栈实现)支持小数计算
    二进制数转化为十进制数(栈的学习练习)
    数据结构:统计学生信息(c++动态链表完成)
    数据结构:删除数组中的元素(c++)链表形式
    约瑟夫环 (c++循环链表方法书写)
  • 原文地址:https://www.cnblogs.com/qdwz/p/10837584.html
Copyright © 2020-2023  润新知