从小片段代码学习ajax入门

完整代码:

<!DOCTYPE html>
<html>
<body>
<div id="demo">
<h1>XMLHttpRequest 对象</h1>
<button type="button" onclick="loadDoc()">修改内容</button>
</div>
<script>
function loadDoc() {
    var xhttp = new XMLHttpRequest();                //1
    xhttp.onreadystatechange = function() {          //2
        var el = document.getElementById("demo");    //3
        if (this.readyState == 4 && this.status == 200) {
                                                     //4
            el.innerHTML = this.responseText;        //5
        }
    };
    xhttp.open("GET", "/demo/js/ajax_info.txt", true);//6
    xhttp.send();                                     //7
}
</script>
</body>
</html>

代码的目的是点击按钮后改变显示的文本,显示 " / demo / js / ajax_info.txt " 中的内容

AJAX 即Asynchronous JavaScript And XML(异步JS和XML)
ajax通过与服务器交换数据更新网页而不需要重新加载整个页面。

ajax的工作流程:(用B代表浏览器,用S代表服务器)

  1. 鼠标点击等网页事件(B)
  2. 创建XMLHttpRequest对象(B)
  3. XMLHttpRequest对象向S发送请求HttpRequest(B -> S)
  4. S处理HttpRequest请求(S)
  5. S创建响应并将数据返回B(S -> B)
  6. JavaScript处理响应的数据(B)
  7. 页面更新(B)

1. 创建XMLHttpRequest对象

var xhttp = new XMLHttpRequest();                //1

XMLHttpRequest对象有以下几种方法:

new XMLHttpRequest();         //创建对象
abort()                       //取消当前请求
send()                        //将请求发送到服务器,使用GET
send("string")                //将请求发送到服务器,使用POST
getAllResponseHeaders()       //返回头部信息
getResponseHeader()           //返回特定头部信息
setRequestHeader(header, value)//向请求添加http头部
        /*  header规定头部名称, value规定头部值   */
open(method, url, async, user, psw) //规定请求
        /*
            method:请求类型 GET 或 POST
            url:文件位置
            async:true(异步)或 false(同步)
            user:可选的用户名称
            psw:可选的密码
        */

2. 向服务器发送请求

xhttp.open("GET", "/demo/js/ajax_info.txt", true);//6
xhttp.send();                                     //7

三种情况下应该用POST:

  1. 需要更新服务器上的数据库时,即不是对缓存操作;
  2. 由于POST无大小限制所以向服务器发送大量数据时;
  3. 发送用户输入的字符时;

当open方法的async参数为true时表示异步发送:
JS在等待服务器响应时可以执行其他脚本,当响应就绪时再处理响应

3. 服务器响应-定义readystate改变时的操作

xhttp.onreadystatechange = function() {          //2
       var el = document.getElementById("demo");    //3
       if (this.readyState == 4 && this.status == 200) {
                                                    //4
           el.innerHTML = this.responseText;        //5
       }
   };

XMLHttpRequest对象有以下属性:

readyState  保存XMLHttpRequest的状态
/*  0:请求未初始化
    1:服务器连接已建立
    2:请求已收到
    3:正在处理请求
    4:请求已完成且响应已就绪  */   

onreadystatechange  定义当 readyState 属性发生变化时被调用的函数
//每当 readyState 发生变化时就会调用 onreadystatechange 函数

responseText  以字符串返回响应数据
responseXML  以XML返回响应数据 

status   返回请求的状态号
/*200: "OK" 403: "Forbidden" 404: "Not Found" 详见http状态码*/

statusText     返回状态文本,比如 "OK" 或 "Not Found"

xhttp.onreadystatechange = function() { /* 定义当readyState改变时要做什么 */};

函数内部为:

var el = document.getElementById("demo");
//通过dom操作获取id为"demo"的<div></div>

if (this.readyState == 4 && this.status == 200) {
el.innerHTML = this.responseText;
}
//如果请求完成且响应已就绪 同时 满足返回请求OK 则改变文本
//以字符串返回响应数据
//应该返回的数据在 步骤2. 发送请求 中已经指定了路径

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Ajax概述 在我们之前学习的内容中,向服务器发送请求后,再浏览器中响应的页面都是整页刷新。 在某些项目中,我...
    lmonkey_01阅读 241评论 0 0
  • 前言 总括: 本文讲解了ajax的历史,工作原理以及优缺点,对XMLHttpRequest对象进行了详细的讲解,并...
    秦至阅读 949评论 0 19
  • 全局刷新和局部刷新 B/S结构项目中,浏览器(Browse)负责把用户的请求和参数通过网络发送给服务器(Serve...
    苦难_69e0阅读 337评论 0 2
  • 在写这篇文章之前,曾经写过一篇关于AJAX技术的随笔,不过涉及到的方面很窄,对AJAX技术的背景、原理、优缺点等各...
    阿里高级软件架构师阅读 298评论 0 2
  • 一、Ajax是什么 Ajax:全称是“Asynchronous Javascript And Xml”,翻译成...
    前端攻城狮子王阅读 529评论 0 4