Ajax(1) —— Ajax基础

2021-02-05 16:14

阅读:566

标签:版本   属性   解析   html   状态改变   eval   问题   相同   接收   

1.   Ajax介绍

Ajax即Asynchronous JavaScript and XML,是异步的JavaScript与XML。Ajax提供了基于服务器交换数据并实现局部更新网页的技术,在不重新加载整个网页的情况下,可以接受来自服务器请求到的数据,提高了浏览页面的效率和用户体验。

 

2.   Ajax基础

2.1.创建Ajax对象

XMLHttpRequest是Ajax的对象,所有现代浏览器(IE7+、Firefox、Chrome、Safari、Opera)均支持XMLHttpRequest对象,而低版本的IE(IE5和IE6)使用ActiveXObject对象。XMLHttpRequest用于在后台与服务器交换数据。即可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

为了兼容所有浏览器的情况,包括低版本的IE,创建Ajax对象可以使用如下代码:

function getAjax() {
    var xhr = null;
        if(XMLHttpRequest){
            xhr = new XMLHttpRequest();
        }else if(ActiveXObject){
            xhr = new ActiveXObject("Microsoft XMLHTTP");
        }
        return xhr;
}

2.2.XHR请求

XMLHttpRequest对象用于和服务器交换数据,将请求发送到服务器,主要使用open()和send()方法

open:创建一个新的http请求,并指定此请求的方法、URL以及验证信息

语法:

XMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);

示例代码:

var xhr = getAjax();
    /**
     *  oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);
     *  bstrMethod http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。
     *  bstrUrl 请求的URL地址,可以为绝对地址也可以为相对地址。
     *  varAsync[可选]布尔型,指定此请求是否为异步方式,默认为true。
     *  如果为真,当状态改变时会调用onreadystatechange属性指定的回调函数。
     */
    xhr.open("GET", "/getTime");
    xhr.send();

 

send:发送请求到http服务器并接收回应:

语法:

XMLHttpRequest.send(varBody);

varBody:仅用于POST请求。

对比一下简单的GET方法发送信息与POST方法发送信息:

//GET方式
xmlhttp.open("GET","demo_get2.asp?fname=Bill&lname=Gates",true);
xmlhttp.send();

//POST方式
xmlhttp.open("POST","demo_post.asp",true);
xmlhttp.send();

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

var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
xhr.open("POST", "/login");
//Ajax设置请求编码 -- 使用POST请求传递参数必须加上
//位置在send之前,open之后
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
//使用POST发送数据,在send里面,写入单独传参的数据
xhr.send("username=" + username + "&password=" + password);

GET和POST使用场景:

GET相对于POST传递数据更简单快捷,在不涉及信息安全的场景下可以使用;

然而,在如下情况下,请使用POST请求传递数据:

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

2.3.XHR异步监听

XMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword),在这个方法中,当Async为true时,表示执行Ajax后端请求时是使用异步请求的方式,这里需要在响应处使用onreadystatechange事件进行监听Ajax的状态:

其中Async参数为可选布尔型,指定此请求是否为异步方式,默认为true。如果为true,当状态改变时会调用onreadystatechange属性指定的回调函数。

//Ajax的异步问题可以通过Ajax的状态来解决:Ajax执行的每一步都有它对应的一个状态 readyState
    //0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)
    //1 (初始化) 对象已建立,尚未调用send方法
    //2 (发送数据) send方法已调用,但是当前的状态及http头未知
    //3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
    //4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据
    //注意:一般我们只需要一个点:readyState==4时,状态已经拿到了
//Ajax对象中有一个监听器,它可以监听每一次状态的变化(onreadystatechange)

2.4.XHR响应

如果需要获取来自服务器的响应,需要调用XMLHttpRequest对象的responseText或者responseXML属性。

属性

描述

responseText

获得字符串形式的响应数据

responseXML

获得XML形式的响应数据

 

 

 

 

 

 

responseText属性:

将响应信息作为字符串返回,因此你可以这样使用:

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

responseXML属性:

如果来自服务器的响应是XML,而且需要作为XML对象进行解析,请使用responseXML属性,比如请求books.xml文件,并解析响应:

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

2.5.XHR callback函数

callback函数是一种以参数形式传递给另一个函数的函数。

在执行多个Ajax调用任务时,可以在XMLHttpRequest对象中创建一个标准的执行流程函数,每次Ajax请求都调用这个函数执行open、send一套流程。

该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同):

Let AJAX change this text

 

博文参考文档W3School Ajax部分内容:https://www.w3school.com.cn/ajax/index.asp

Ajax(1) —— Ajax基础

标签:版本   属性   解析   html   状态改变   eval   问题   相同   接收   

原文地址:https://www.cnblogs.com/yif0118/p/13124483.html


评论


亲,登录后才可以留言!