欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端开发 | ajax基础了解

程序员文章站 2024-01-25 16:04:59
...

AJAX介绍

AJAX (Asynchronous JavaScript and XML)即异步的 JavaScript 和 XML。
AJAX 不是新的编程语言,而是一种在无需重新加载整个网页的情况下,通过在后台与服务器进行少量数据交换使网页实现异步更新的技术。而传统的网页不使用 AJAX的话,如果需要更新内容,必需重载整个网页面。AJAX是基于现有的Internet标准。

Google 支持

在 2005 年,Google 通过其 Google Suggest 使 AJAX 变得流行起来。
Google Suggest 使用 AJAX 创造出动态性极强的 web 界面:当您在谷歌的搜索框输入关键字时,JavaScript 会把这些字符发送到服务器,然后服务器会返回一个搜索建议的列表。

AJAX 基础

XMLHttpRequest是 AJAX 的基础。

使用Ajax发送请求步骤:

  • 1、创建XMLHttpRequest对象
  • 2、向服务器发送请求
  • 3、执行发送动作
  • 4、指定回调函数

XMLHttpRequest 对象

XMLHttpRequest 对象用于和服务器交换数据。所有现代浏览器均支持 XMLHttpRequest 对象IE5IE6使用 ActiveXObject)XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

创建 XMLHttpRequest 对象

所有浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象。
创建 XMLHttpRequest 对象的语法:

variable=new XMLHttpRequest();

前端开发 | ajax基础了解

注意:Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:

variable=new ActiveXObject("Microsoft.XMLHTTP");

前端开发 | ajax基础了解

向服务器发送请求

如需将请求发送到服务器,通过使用 XMLHttpRequest 对象的open()send()方法:发送请求语法如下:

xmlhttp.open(method,url,async);
xmlhttp.send(string);

规定请求的类型、URL 以及是否异步处理请求。
参数解析:

  1. open() – 发送准备
  • method:请求的类型;GET 或 POST
  • url:文件在服务器上的位置
  • async:参数为true(异步)或 false(同步)
  1. send() – 将请求发送到服务器。
  • string:仅用于 POST 请求

请求方式

请求方式有GETPOST,与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。

//GET请求:
xhr.open('GET','./check.php?username='+uname+'&password='+pw,true);
xmlhttp.send();

POST请求

使用POST 请求的一般为:

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

如果需要像 HTML 表单那样 POST 数据,使用setRequestHeader()来添加 HTTP 头。然后在 send()方法中规定要发送的数据:

向请求添加 HTTP 头语法格式:

setRequestHeader(header,value) 	

前端开发 | ajax基础了解

参数解析:

  • header: 请求头的名称
  • value: 请求头的值

实例:

//POST请求:
xhr.open('POST','./check.php?username='+uname+'&password='+pw,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("username='+uname+'&password='+pw");

异步 True 或 False

XMLHttpRequest 对象如果要用于 AJAX 的话,其open()方法的 async参数必须设置为 true

xhr.open('GET','./check.php?username='+uname+'&password='+pw,true);
xmlhttp.send();

当使用 async=true 时,规定在响应处于 onreadystatechange 事件中的就绪状态时执行的事件函数:
前端开发 | ajax基础了解
当async=false 时,无需写onreadystatechange 函数:

服务器响应

要获得来自服务器的响应,通过使用 XMLHttpRequest 对象的responseTextresponseXML属性:

  • responseText 获得字符串形式的响应数据。
  • responseXML 获得 XML 形式的响应数据。

前端开发 | ajax基础了解

onreadystatechange 事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。
每当 readyState 改变时,就会触发onreadystatechange 事件
readyState 属性存有XMLHttpRequest的状态信息。

XMLHttpRequest 对象的三个重要的属性如下表:

属性 描述
onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
readyState 存有 XMLHttpRequest 的状态。从0 到 4发生变化。0: 请求未初始化; 1: 服务器连接已建立; 2: 请求已接收; 3: 请求处理中; 4: 请求已完成,且响应已就绪
status 200: “OK” ; 404: 未找到页面

在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
readyState等于 4且状态为200 时,表示响应已就绪:
前端开发 | ajax基础了解

使用回调函数

回调函数是一种以参数形式传递给另一个函数的函数。
如果网站上存在多个 AJAX 任务,那么应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。
前端开发 | ajax基础了解

完整实例:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>初识Ajax开发</title>
    <script type="text/javascript">
    window.onload = function(){
        var btn = document.getElementById('btn');
        btn.onclick = function(){
            var uname = document.getElementById('username').value;
            var pw = document.getElementById('password').value;

            // 1、创建XMLHttpRequest对象
            var xhr = null;
            if(window.XMLHttpRequest){
                xhr = new XMLHttpRequest();//标准
            }else{
                xhr = new ActiveXObject("Microsoft");//IE5,IE6
            }
            // readyState=0表示xhr对象创建完成
            console.log(xhr.readyState + '----------1-----------');
            // 2、准备发送
            var param = 'username='+uname+'&password='+pw;
            xhr.open('post','04post.php',true);
            // 3、执行发送动作
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xhr.send(param);//post请求参数在这里传递,并且不需要转码
            // 4、指定回调函数
            // readyState=1表示已经发送了请求
            console.log(xhr.readyState + '----------2-----------');
            // 该函数调用的条件就是readyState状态发生变化(不包括从0变为1)
            xhr.onreadystatechange = function(){
                console.log(xhr.readyState + '----------3-----------');
                // 4表示服务器返回的数据已经可以使用了,但是这个数据不一定是正常的
                if(xhr.readyState == 4){
                    // 200表示服务器返回的数据是正常的,不是200的话表示数据是错误的
                    if(xhr.status == 200){
                        // 这里的200表示数据是正常的
                        alert(xhr.responseText);
                        // xhr.responseXML
                    }
                }
            }
            
        }
    }
    </script>
</head>

<body>
    <form>
        用户名:
        <input type="text" name="username" id="username"><span id="info"></span>
        <br> 密码:
        <input type="text" name="password" id="password">
        <input type="button" value="登录" id="btn">
    </form>
</body>

</html>

相关标签: ajax