0
点赞
收藏
分享

微信扫一扫

Ajax入门

香小蕉 2022-02-07 阅读 154

一.什么是ajax

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。

Ajax = 异步 JavaScript 和 XML(标准通用标记语言的子集)。

什么是异步操作呢,就是在同一网页里进行部分的操作,不需要刷新整个网页,就能刷新局部的数据。

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。  
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式

异步请求 :基于ajax发送的请求都属于异步请求,特点:请求之后,页面不动 响应回来刷新页面局部

二.Ajax包含技术

1. 使用CSS和XHTML来表示。
2. 使用DOM模型来交互和动态显示。
3. 使用XMLHttpRequest来和服务器进行异步通信。
4. 使用javascript来绑定和调用。

一、http协议概述

http协议全称超文本传输协议,服务器与客户端通信的协议。

在http协议的约定下,客户端可以向服务器发送请求,服务器在接收到请求之后,给予客户端响应。

二、http协议请求的常用方法

本节我们讲解http协议常用的四种方法,用来完成数据的增、删、改、查操作。

  • get方法:获取数据

  • post方法:提交数据

  • put方法:修改数据

  • delete方法:删除数据

注意的是,http请求本身并不会完成增删改查的基本操作,真正的操作仍然是由服务器完成。

这些操作仅仅是一种约定,例如:我们用get请求配合服务器程序,可以获取数据,同样也可以添加、删除、修改数据,但是为了规范我们的程序,通常只用get方法来查询数据。

三.XML Http Requset

来讲个故事

xmlhttprequest理解成是一个信使,浏览器在做蛋炒饭,给了一封信给信使,让他发给服务器,问服务器炒饭加蛋吗?

浏览器继续炒饭

随后服务器借助信使告诉浏览器,我不要吃炒饭了,我吃大盘鸡,

于是乎浏览器收到信后就说好嘞,那我去做大盘鸡。

xmlhttprequest就是一个中间人的角色,让浏览器在忙的时候,可以和服务器交互,从而不打断浏览器现在的状态。

当我们使用AJAX之后,浏览器是先把请求发送到XMLHttpRequest异步对象之中,异步对象对请求进行封装,然后再与发送给服务器。服务器并不是以转发的方式响应,而是以流的方式把数据返回给浏览器。

四.创建一个XMLHttpRequest

要创建XMLHttpRequest对象是要分两种情况考虑:1.在IE6以下的版本、2.在IE6以上的版本以及其他

<script>
var xmlhttp;
if (window.XMLHttpRequest)
{
    //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    xmlhttp=new XMLHttpRequest();
}
else
{
    // IE6, IE5 浏览器执行代码
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
</script>

这个ifelse是为了照顾ie这个孤儿。我们获得了xmlhttprequest之后可以干嘛呢?

五.使用XMLHttpRequest

xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();
//最常用的就是这两个方法

 

(1) responseText 属性      (获得字符串形式的响应数据。)

document.getElementById("Divs").innerHTML=xmlhttp.responseText;

(2)responseXML 属性      (获得 XML 形式的响应数据)

xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for(i=0;i<x.length;i++)
{
    txt=txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("Divs").innerHTML=txt;

七.我们可以在哪里调用XMLHttprequest回来的数据呢??

xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("Divs").innerHTML=xmlhttp.responseText;
    }
}

这个onreadystatechange后面的function就像接口一样,实现了这个接口内部类,当响应的信息发生更改的时候就会调用这个类的方法。(java后台的理解)

onreadystatechange 事件被触发 4 次(0 - 4), 分别是: 0-1、1-2、2-3、3-4,对应着 readyState 的每个变化。

xmlhttp.readyState的值及解释:
0请求未初始化(还没有调用 open())。
1请求已经建立,但是还没有发送(还没有调用 send())。
2请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
3请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
4响应已完成;您可以获取并使用服务器的响应了。

statue可以自己去查一下。和404啊那些都是一个东西

八.Ajax优缺点

优点:

缺点:

Ajax的原理是通过XMLhttpRequest对象向服务器发送请求,实例代码如下所示:

//前端程序
var xhr = new XMLHttpRequest(); //创建XHR对象
xhr.open("get","/data");   //规定请求类型
xhr.send()                      //发送请求
xhr.onreadystatechange = function(){ //监听readyState事件
// 0: 请求未初始化
// 1: 服务器连接已建立
// 2: 请求已接收
// 3: 请求处理中
// 4: 请求已完成,且响应已就绪
  if(xhr.readyState === 4 && xhr.status === 200){
      alert(xhr.responseText)
  }
}

这里需要注意的是,上面的代码,我们在实际开发项目中并不常用,因为通常情况下,我们会引入第三方Ajax库来处理异步请求。

九.封装一个Ajax方法

回调函数

封装到一个myAjax方法,需要注意的是,因为Ajax是异步的操作,因此封装的Ajax不能用return获取返回值。下面的示例使用的是回调函数封装的Ajax方法

function myAjax(method,url,next) {
   let xhr = new XMLHttpRequest();
   xhr.open(method, url);
   xhr.send()
   xhr.onreadystatechange = function () {
       if (xhr.readyState === 4 && xhr.status === 200) {
           next(xhr.responseText);
       }
   }
}
​
document.querySelector("button").onclick = function() {//调用封装的Ajax
  myajax("get","/data",function(data){
      alert(data);
  });
}

Promise

过多的使用回调函数会让程序变得很难维护,用Promise重新封装ajax方法

function myajax(method, url, next) {
   return new Promise(function (resolve,reject) {
       let xhr = new XMLHttpRequest();
       xhr.open(method, url);
       xhr.send(); //可以向后台传输数据
       xhr.onreadystatechange = function () {
           if (xhr.readyState === 4 && xhr.status === 200) {
               resolve(xhr.responseText);
           }
       }
       reject("获取数据失败")
   })
}
document.querySelector("button").onclick = async function () {
   let p = myajax("get", "data");
   p.then(function (data) {
       alert(data);
   })
}

使用async函数才是处理异步问题的终极解决方案,在开发中,尽量使async函数来处理异步问题。

十.例子

使用POST请求


<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>

<body>
<button class="btn btn-success" id="search">查询</button>
<button class="btn btn-success" onclick="addUser()">addUser</button>
<button class="btn btn-success" id="save">添加</button>
        <span id="username"></span>
        <div class="form-group">
            <label class="label">请输入姓名:</label>
            <input id="name" name="name" type="text" placeholder="请输入姓名">
        </div>
        <div class="form-group">
            <label class="label">请输入住址:</label>
            <input id="address" name="address" type="text" placeholder="请输入住址">
        </div>
</body>

<script>
    document.getElementById("save").onclick = function () {
       
        var request = new XMLHttpRequest();
        request.open("POST","/save");
        var name= document.getElementsByName("name")[0].value;//使用getElementsByName
        var address= document.getElementById("address").value;//使用getElementById(value不带values())
        request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        // request.send("name=jiuyue&address=wuhan");
        var data = "name="+name+"&address="+address;
        request.send(data);
        request.onreadystatechange = function () {
            if (request.readyState==4){ //是否数据接收完成
                if (request.status==200){  //返回的状态码
                    document.getElementById("username").innerHTML = request.responseText;
                } else {
                    alert("发生错误:"+request.status);
                }
            }
        }

    }
</script>

</html>

<html>
<head>

<script type="text/javascript">
function loadXMLDoc(){

var xmlhttp;
if (window.XMLHttpRequest){
  // code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else{
  // code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

xmlhttp.onreadystatechange=function(){
  if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
  }

 }
xmlhttp.open("GET","/ajax/test1.txt",true);
xmlhttp.send();
}
</script>

</head>
<body>

<div id="myDiv">
<h2>Let AJAX change this text</h2>
</div>

<button type="button" onclick="loadXMLDoc()">通过 AJAX 改变内容</button>

</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    
    <script>
    document.getElementById("search").onclick = function () {
        
        var request=new XMLHttpRequest();//创建XMLHttpRequest对象
        request.open("GET","/users");
        
// request.setRequestHeader("Content-Type", "application/x-wwww-form-urlencoded");
       
         request.send();

        request.onreadystatechange = function () {
            if (request.readyState==4){ //是否数据接收完成
                if (request.status==200){ //返回的状态码
                    document.getElementById("username").innerHTML = request.responseText;
                   //将返回的数据赋值到<span>中
                } else {
                    alert("发生错误:"+request.status);
                }
            }
        }

    }
</script>
</head>

<body>
     <button class="btn btn-success" id="search">查询</button>
     <span id="username"></span>
</body>

</html>
举报

相关推荐

AJAX——AJAX入门

Ajax 入门

AJAX入门

Ajax 快速入门

AJAX入门基础

Ajax基础入门

Ajax快速入门

javaweb(AJAX快速入门)

0 条评论