从小片段代码学习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. 发送请求 中已经指定了路径

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

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