ajax 原理

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。    其中最关键的一步就是从服务器获得请求数据。

 

XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。

 

XMLHttpRequest讲起,来看看它的工作原理。

首先,我们先来看看XMLHttpRequest这个对象的属性。

它的属性有:

    onreadystatechange  每次状态改变所触发事件的事件处理程序。

    responseText     从服务器进程返回数据的字符串形式。

    responseXML    从服务器进程返回的DOM兼容的文档数据对象。

    status           从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪)

    status Text       伴随状态码的字符串信息

    readyState       对象状态值

     0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)

     1 (初始化) 对象已建立,尚未调用send方法

     2 (发送数据) send方法已调用,但是当前的状态及http头未知

     3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,

     4 (完成) 数据接收完毕,此时可以通过通过responseXml和responseText获取完整的回应数据

但是,由于各浏览器之间存在差异,所以创建一个XMLHttpRequest对象可能需要不同的方法。这个差异主要体现在IE和其它浏览器之间。下面是一个比较标准的创建XMLHttpRequest对象的方法。

      

function CreateXmlHttp() {

    //非IE浏览器创建XmlHttpRequest对象
    if (window.XmlHttpRequest) {
        xmlhttp = new XmlHttpRequest();
    }

    //IE浏览器创建XmlHttpRequest对象
    if (window.ActiveXObject) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {
            try {
                xmlhttp = new ActiveXObject("msxml2.XMLHTTP");
            }
            catch (ex) { }
        }
    }
}

function Ustbwuyi() {

    var data = document.getElementById("username").value;
    CreateXmlHttp();
    if (!xmlhttp) {
        alert("创建xmlhttp对象异常!");
        return false;
    }

    xmlhttp.open("POST", url, false);

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
            document.getElementById("user1").innerHTML = "数据正在加载...";
            if (xmlhttp.status == 200) {
                document.write(xmlhttp.responseText);
            }
        }
    }
    xmlhttp.send();
}

 如上所示,函数首先检查XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问请求状态,如果一切已经就绪(status=200),那么就执行下面需要的操作。

对于XmlHttpRequest的两个方法,open和send,其中open方法指定了:

a、向服务器提交数据的类型,即post还是get。

b、请求的url地址和传递的参数。

      c、传输方式,false为同步,true为异步。默认为true。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。我们需要根据实际需要来指定同步方式,在某些页面中,可能会发出多个请求,甚至是有组织有计划有队形大规模的高强度的request,而后一个是会覆盖前一个的,这个时候当然要指定同步方式。

    Send方法用来发送请求。

 

知道了XMLHttpRequest的工作流程,我们可以看出,XMLHttpRequest是完全用来向服务器发出一个请求的,它的作用也局限于此,但它的作用是整个ajax实现的关键,因为ajax无非是两个过程,发出请求和响应请求。并且它完全是一种客户端的技术。而XMLHttpRequest正是处理了服务器端和客户端通信的问题所以才会如此的重要。

  现在,我们对ajax的原理大概可以有一个了解了。我们可以把服务器端看成一个数据接口,它返回的是一个纯文本流,当然,这个文本流可以是XML格式,可以是Html,可以是Javascript代码,也可以只是一个字符串。这时候,XMLHttpRequest向服务器端请求这个页面,服务器端将文本的结果写入页面,这和普通的web开发流程是一样的,不同的是,客户端在异步获取这个结果后,不是直接显示在页面,而是先由javascript来处理,然后再显示在页面。至于现在流行的很多ajax控件,比如magicajax等,可以返回DataSet等其它数据类型,只是将这个过程封装了的结果,本质上他们并没有什么太大的区别。

 

 

ajax的优点

 

   Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点:

    1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。

  2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。

  3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。

    4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

 

转载于:https://www.cnblogs.com/fanxiaowu/p/4497995.html

<think>嗯,用户想了解AJAX的工作原理。让我先回忆一下AJAX相关的知识。AJAX全称是Asynchronous JavaScript and XML,不过现在可能更多用JSON代替XML了。首先,AJAX的核心应该是在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。这应该涉及到异步通信,也就是JavaScript在后台发送请求,处理响应,然后局部更新页面。 接下来,需要具体说明AJAX的工作流程。可能需要提到XMLHttpRequest对象,或者现在常用的Fetch API。用户提供的引用里提到了XHR的使用步骤,比如创建对象、open方法、监听事件、send方法。这些步骤需要详细解释。比如,创建XHR对象后,用open设置请求方法和URL,然后设置回调函数处理响应,最后发送请求。另外,还要说明异步处理,避免阻塞页面。 然后,用户提到的引用中有关于AJAX的优点,比如局部刷新、提升用户体验。这部分应该作为工作原理带来的好处来强调。例如,百度地图的例子,局部更新而不是整个页面重载,减少数据传输量,加快响应速度。 可能还需要对比传统网页和AJAX的区别。传统方式是同步的,每次操作都导致整个页面刷新,而AJAX在后台异步处理,只更新需要的部分。这样用户操作不会中断,体验更流畅。 另外,引用中提到了Ajax的实现步骤,比如JS和jQuery的不同方法。但用户的问题主要是原理,所以可能需要简要提到不同实现方式,但重点在原理部分。比如,无论用原生JS还是jQuery,底层都是基于XHR或Fetch API的异步通信。 还要注意用户提供的引用内容,比如引用[4]提到XHR的使用步骤,创建对象、调用open、监听事件、send。这些步骤需要详细拆解,每一步的作用是什么。比如,open方法设置请求类型和URL,send发送请求,监听事件处理响应。 可能还需要提到同源策略和跨域问题,但用户的问题集中在原理,可能不需要深入,但可以稍微提一下,比如如果请求不同源,可能会遇到限制,需要CORS等处理。 总结下来,回答的结构应该是先定义AJAX,然后核心原理(异步、局部更新),接着详细步骤(XHR对象的使用流程),最后优缺点和应用场景。确保覆盖用户提供的引用中的关键点,比如局部刷新、异步、XHR步骤等,并正确标注引用来源。</think>### AJAX 的工作原理 AJAX(Asynchronous JavaScript and XML)是一种通过异步通信实现网页局部更新的技术。其核心是**在不重新加载整个页面的情况下,与服务器交换数据并动态更新部分内容**。以下是其工作原理的详细步骤: --- #### 1. **异步通信的核心组件** AJAX 基于以下组件实现异步交互: - **`XMLHttpRequest` 对象**(现代浏览器支持 `fetch API`):用于在后台与服务器交换数据[^4]。 - **JavaScript**:负责发送请求、处理响应并更新页面。 - **DOM(文档对象模型)**:动态修改网页内容。 --- #### 2. **AJAX 的工作流程** 以下是基于 `XMLHttpRequest` 的典型流程: 1. **创建 XHR 对象** 通过 `new XMLHttpRequest()` 初始化一个请求对象。 ```javascript const xhr = new XMLHttpRequest(); ``` 2. **配置请求参数** 使用 `open()` 方法设置请求类型(GET/POST)和 URL。 ```javascript xhr.open('GET', 'https://api.example.com/data', true); // 第三个参数 true 表示异步 ``` 3. **监听服务器响应** 通过事件监听(如 `load` 或 `readystatechange`)处理返回的数据[^4]。 ```javascript xhr.onload = function() { if (xhr.status === 200) { document.getElementById('content').innerHTML = xhr.responseText; } }; ``` 4. **发送请求** 调用 `send()` 方法发起请求,可附加请求体(如 POST 数据)[^4]。 ```javascript xhr.send(); ``` --- #### 3. **关键特性** - **异步性**:JavaScript 继续执行其他任务,无需等待服务器响应[^2]。 - **局部更新**:仅修改 DOM 中需要变化的部分(如百度地图的位置更新)[^2]。 - **数据格式灵活**:支持 JSON、XML、HTML 等多种数据格式。 --- #### 4. **AJAX 的优势与限制** | **优势** | **限制** | |-----------------------------------|-----------------------------------| | 提升用户体验(无整页刷新)[^2] | 依赖 JavaScript,需考虑兼容性 | | 减少带宽消耗(局部数据传输) | 跨域请求需配置 CORS 或代理 | | 支持前后端分离架构 | SEO 不友好(动态内容不易被爬取) | --- #### 5. **应用场景** - 表单验证(实时检查用户名是否重复) - 无限滚动(如社交媒体动态加载) - 自动补全搜索(如 Google 搜索建议) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值