100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > AJAX的原理-如何做到异步和局部刷新

AJAX的原理-如何做到异步和局部刷新

时间:2022-04-22 09:57:45

相关推荐

AJAX的原理-如何做到异步和局部刷新

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

参考:/mingmingruyuedlut/archive//10/18/2216553.html

详解:

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

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

[javascript]view plain copydocument.getElementById("user1").innerHTML="数据正在加载...";if(xmlhttp.status==200){document.write(xmlhttp.responseText);}

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

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

业务函数:

[javascript]view plain copyfunctioncastVote(rank){varurl="/ajax-demo/static-article-ranking.html";varcallback=processAjaxResponse;executeXhr(callback,url);}

需要异步通讯的函数:[javascript]view plain copyfunctionexecuteXhr(callback,url){//branchfornativeXMLHttpRequestobjectif(window.XMLHttpRequest){req=newXMLHttpRequest();req.onreadystatechange=callback;req.open("GET",url,true);req.send()(null);}//branchforIE/WindowsActiveXversionelseif(window.ActiveXObject){req=newActiveXObject("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指派所设置的回调方法将被自动调用。

回调函数:

[javascript]view plain copyfunctionprocessAjaxResponse(){if(req.readyState==4){//onlyif"OK"if(req.status==200){document.getElementById("user1").innerHTML=req.responseText;}else{alert("TherewasaproblemretrievingtheXMLdata:"+req.statusText);}}}

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

参考:/mingmingruyuedlut/archive//10/18/2216553.html

详解:

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

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

[javascript]view plain copydocument.getElementById("user1").innerHTML="数据正在加载...";if(xmlhttp.status==200){document.write(xmlhttp.responseText);}

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

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

业务函数:

[javascript]view plain copyfunctioncastVote(rank){varurl="/ajax-demo/static-article-ranking.html";varcallback=processAjaxResponse;executeXhr(callback,url);}

需要异步通讯的函数:[javascript]view plain copyfunctionexecuteXhr(callback,url){//branchfornativeXMLHttpRequestobjectif(window.XMLHttpRequest){req=newXMLHttpRequest();req.onreadystatechange=callback;req.open("GET",url,true);req.send()(null);}//branchforIE/WindowsActiveXversionelseif(window.ActiveXObject){req=newActiveXObject("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指派所设置的回调方法将被自动调用。

回调函数:

[javascript]view plain copyfunctionprocessAjaxResponse(){if(req.readyState==4){//onlyif"OK"if(req.status==200){document.getElementById("user1").innerHTML=req.responseText;}else{alert("TherewasaproblemretrievingtheXMLdata:"+req.statusText);}}}

转载自:/fyxxq/article/details/22219361

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。