liantao iterm

前言

本文的目标仅仅是让你Ajax是个什么东西,为什么要用它及它的简单使用!

Ajax(Asynchronous JavaScript + XML)是什么?

在初学的时候,问多个人就会有不同的回答。

按照MDN的说法:

Asynchronous JavaScript + XML(异步JavaScript和XML), 其本身不是一种新技术,而是一个在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括:HTMLorXHTML,Cascading Style Sheets,JavaScript,The Document Object Model,XML,XSLT, 以及最重要的XMLHttpRequest object。当使用结合了这些技术的AJAX模型以后, 网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面。这使得程序能够更快地回应用户的操作。

尽管X在Ajax中代表XML, 但由于JSON的许多优势,比如更加轻量以及作为Javascript的一部分,目前JSON的使用比XML更加普遍。JSON和XML都被用于在Ajax模型中打包信息。

一句话描述:一个在不刷新页面的情况下和服务器通信(发送、接收)的技术。

为什么使用Ajax?

我们通常使用AJAX最主要的两个特性做下列事:

注意关键字:不重新加载页面

那,发送请求,为什么页面会重新加载呢?

首先,我们先看看我们是不用Ajax是怎么发送请求的:

  1. 直接发送URL请求,可以在URL后面用?test=xx的形式添加参数发送给后台

  2. 表单提交

使用什么方法无所谓,都是发送了一个http请求,只不过有可能他们使用的请求方法不同而已,http请求方法请看get和post

或者youtube视频原来 POST 是这样发送数据.

所以,如果不进行特殊的处理,他们都会重新加载页面,这导致用户体验极差,于是有了Ajax。

Ajax工作原理

为了使用JavaScript向服务器发送一个http请求,你需要一个包含必要函数功能的对象实例。

这就是为什么会有 XMLHttpRequest 的原因。

使用XMLHttpRequest (XHR)对象可以与服务器交互。您可以从URL获取数据,而无需让整个的页面刷新,这使得Web页面可以只更新页面的局部,而不影响用户的操作。

XMLHttpRequest在 Ajax 编程中被大量使用。

XMLHttpRequest Api

liantao iterm

对于Ajax的简单使用:

以github api为例,可在控制台打印出从服务器返回的用户信息

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>ajax学习</title>
<script>
window.onload=function()
{
    oBtn=document.getElementById("input1");
    oBtn.onclick=function()
    {
        if(window.XMLHttpRequest)
        {
            var oAjax=new XMLHttpRequest();
        }
        else
        {
            var oAjax=new ActiveXobject("Microsoft.XMLHTTP"); //兼容IE6
        }
        
        //2.连接服务器
        //open(方法,URL,异步传输)
        oAjax.open('GET','https://api.github.com/users/famine-life',true);
        
        //3.发送请求
        oAjax.send();
        
        //4接收返回
        oAjax.onreadystatechange=function()
        {
            //oAjax.readystate //浏览器和服务器进行到哪部了?
            if(oAjax.readyState==4)
            {
                if(oAjax.status==200)
                {
                    console.log("success!"+oAjax.responseText);
                }
                else
                {
                    console.log("defeat!"+oAjax.staus);
                }
            }
        }
    }
}

</script>
</head>
<body>
    <input type="button" id="input1" value="点击">
</body>
</html>

简单的封装自己的Ajax库

new_Ajax.js



function myajax(method,url,fnSucc,fnFail)
{
    //获得XMLHttpRequest对象
    if(window.XMLHttpRequest)
        {
            var oAjax=new XMLHttpRequest();
        }
        else
        {
            var oAjax=new ActiveXobject("Microsoft.XMLHTTP"); //兼容IE6
        }
        
        //2.连接服务器
        //open(方法,文件名,异步传输)
        oAjax.open(method,url,true);
        //3.发送请求
        oAjax.send();
        
        //4接收返回
        oAjax.onreadystatechange=function()
        {
            //oAjax.readystate //浏览器和服务器进行到哪部了?
            if(oAjax.readyState==4)
            {
                if(oAjax.status==200)
                {
                    console.log("ajax 返回数据success")
                    fnSucc(oAjax.responseText);
                    //alert("success!"+oAjax.responseText);
                }
                else
                {
                    if(fnFail){
                        fnFail(oAjax.status);
                        //alert("defeat!"+oAjax.staus);
                    }
                }
            }
        }
}

使用方法:

引入自己写的js文件:

<script src="new_Ajax.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>ajax学习</title>
    <script src="new_Ajax.js"></script>

<script>
window.onload=function()
{

    //ajax(url,fnSucc,fnFail)
    var method = "GET";
    var URL = "https://api.github.com/users/famine-life";
    new myajax(method,URL,fnSucc,fnFail);
    function fnSucc(result){
        console.log("fnSucc"+result);
    }
    function fnFail(result){
        console.log("fnFail");
    }
    

}

</script>
</head>
<body>
    <h1>查看控制台输出</h1>

</body>
</html>

当然你还可以封装更多的方法,比如自己封装jq库Ajax的get和post方法:$.get()$.post()

本文由 练涛 创作, 采用 知识共享署名4.0 国际许可协议进行许可。

本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。