java ajax 局部刷新,AJAX的原理—如何做到异步和局部刷新【实现代码】

本文深入解析了AJAX如何实现异步和局部刷新。通过XMLHttpRequest对象,当服务器响应就绪,onReadyStateChange回调函数执行,实现局部DOM更新,从而达到无刷新用户体验。异步通讯主要依赖于Javascript的回调函数,当服务器处理完请求并返回,回调函数自动调用,确保不阻塞页面其他操作。整个过程涉及到客户端对服务器状态的轮询检查,确保数据正确接收。

Overriew: onReadyStateChange被回调函数赋值,则能实现异步调用,回调函数直接操作DOM,则能实现局部刷新。那么XMLHttpRequest的onReadyStateChange如何知道服务ready了呢?状态如何change了呢(观察者模式)?则是通过客户端对服务的状态询问(定期轮询)所实现的。

详解:

1.XMLHttpRequest 负责与服务器端的通讯,其内部有很多重要的属性:readyStatus=4,status=200等等。当XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问(类似于客户端会轮询服务器的返回状态,仍然是http短连接,并非长连接的服务器端push)请求状态,如果一切已经就绪(status=200),那么就执行需要的操作。

操作一般就是直接操作DOM,所以AJAX能做到所谓的“无刷新”用户体验。

document.getElementById("user1").innerHTML = "数据正在加载...";

if (xmlhttp.status == 200) {

document.write(xmlhttp.responseText);

}

2. 那么在AJAX客户端如何做到的异步呢?实际上就是Javascript的回调函数起的作用

提供一个回调JavaScript函数,一旦服务器响应可用,该函数就被执行

业务函数:

function castVote(rank) {

var url = "/ajax-demo/static-article-ranking.html";

var callback = processAjaxResponse;

executeXhr(callback, url);

}

需要异步通讯的函数:

function executeXhr(callback, url) {

// branch for native XMLHttpRequest object

if (window.XMLHttpRequest) {

req = new XMLHttpRequest();

req.onreadystatechange = callback;

req.open("GET", url, true);

req.send()(null);

} // branch for IE/Windows ActiveX version

else if (window.ActiveXObject) {

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

if (req) {

req.onreadystatechange = callback;

req.open("GET", url, true);

req.send()();

}

}

}

req.onreadystatechange = callback

req.open("GET", url, true)

第一行定义了JavaScript回调函数,一旦响应就绪它就自动执行,而req.open()方法中所指定的“true”标志说明想要异步执行该请求。

一旦服务器处理完XmlHttpRequest并返回给浏览器,使用req.onreadystatechange指派所设置的回调方法将被自动调用。

回调函数:

function processAjaxResponse() {

if (req.readyState == 4) {

// only if "OK"

if (req.status == 200) {

document.getElementById("user1").innerHTML = req.responseText;

} else {

alert("There was a problem retrieving the XML data:

" + req.statusText);

}

}

}

以上这篇AJAX的原理—如何做到异步和局部刷新【实现代码】就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值