Ajax进修笔记

近来在学php,方才入门,用到很多与Ajax相干的交互。Ajax也用了挺久的了,想写一下进修笔记来纪录一下。本日先简朴写一下道理和历程。迎接人人一同讨论。

什么是AJAX

AJAX的全称是Asynchronous JavaScript and XML。
它是一种基于JavaScript的网页应用手艺。传统的提交体式格局会重载全部网页,而应用AJAX手艺能够使JavaScript与Web服务器异步传输数据,从而完成不重载全部页面的情况下,更新部分页面部分内容。

Ajax完成历程

0. XMLHttpRequest是AJAX的基本,XMLHTTPRequest()是中心对象,首先要实例化一个XMLHTTPRequest()对象

var xhr = new XMLHTTPRequest();

1. AJAX举行要求,划定要求的范例、URL 以及是不是异步处置惩罚要求。

xhr.open(method, url, async);

open()要领吸收三个参数:

  • method:要求的范例;GET 或 POST
  • url:文件在服务器上的位置
  • async:true(异步)或 false(同步)

AJAX的道理就是Asynchronous异步的,所以第三个参数async为true。

第一个参数method决议了要求范例,即传输数据的体式格局。

  • GET
  • 与POST比拟,GET 更简朴也更快。然则传输数据时会将数据放在地址栏的背面,对客户端而言不平安。除此之外,GET传输数据的大小受限,平常只要2k-8k,因浏览器而异。所以在传输不敏感信息而且传输文件小的情况下,我们能够挑选用GET体式格局传输。
  • POST
  • POST传输是传输数据体,是隐式的,相对客户端较为平安。然则从另一层面上来讲,相对服务器端就有肯定的风险了。POST传输数据没有大小限定,然则服务器对上传的数据有限定,须要手动修正。

2. AJAX向服务器发送要求

xhr.send(string);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

用GET要领传输时,send(null),用POST要领传输时,须要用setRequestHeader要领设置要求头。

3. AJAX相应服务器状况

AJAX相应服务器状况触及XMLHttpRequest对象的三个主要的属性:onreadystatechange、readyState、status。
readyState存有XMLHttpRequest的状况。从0到4发生变化:

  • 0: 要求未初始化
  • 1: 服务器衔接已竖立
  • 2: 要求已吸收
  • 3: 要求处置惩罚中
  • 4: 要求已完成,且相应已停当

每当readyState转变时,就会触发onreadystatechange事宜,在事宜中推断要求是不是胜利,相应是不是停当,当readyState即是4且状况为200时,示意相应已停当:

xhr.onreadystatechange = function () {
    if (xhr.readyState === 4) {
        if (xhr.status === 200) {
            obj.success(xhr.responseText);
        }
    }
}

4. 运用 Callback 函数

obj.success(xhr.responseText);

AJAX相应停当后,对吸收到的数据举行后续的操纵。

Ajax原生封装

var ajax = {
    create: function () {
        var xhr;
        if (XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else{
            xhr = new ActiveXObject('Microsoft.XMLHTTP');
        }
        return xhr;
    },
    request: function (obj) {
        var xhr = this.create();
        var data = this.changeData(obj.data);
        if (obj.type === 'GET') {
            xhr.open(obj.type, obj.url+'?rand='+Math.random()+'&'+data, true);
            xhr.send(null);
        } else if (obj.type === 'POST') {
            xhr.open(obj.type, obj.url, true);
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
            xhr.send(data);
        }
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                    obj.success(xhr.responseText);
                }
            }
        }
    },
    changeData: function (data) {
        var arr = [];
        for (var i in data) {
            arr.push(i+'='+data[i]);
        }
        return arr.join('&');
    }
}
// 挪用
ajax.request({
    type: 'POST',
    url: 'weibo.php',
    data: 'act=update',
    success: function(res){
        console.log(res);
    }
});

能够看出挪用的情势与jQuery的完成道理类似。

    原文作者:石头
    原文地址: https://segmentfault.com/a/1190000017354983
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞