欢迎来到福编程网,本站提供各种互联网专业知识!

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

发布时间:2016-05-12 作者:投稿jingxian 来源:转载
如何做到异步和局部刷新?下面小编就为大家带来一篇AJAX的原理—如何做到异步和局部刷新【实现代码】。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

详解:

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

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

代码
  1. document.getElementById("user1").innerHTML = "数据正在加载...";
  2. if (xmlhttp.status == 200) {
  3. document.write(xmlhttp.responseText);
  4. }

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

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

业务函数:

代码
  1. function castVote(rank) {
  2. var url = "/ajax-demo/static-article-ranking.html";
  3. var callback = processAjaxResponse;
  4. executeXhr(callback, url);
  5. }
  6. 需要异步通讯的函数:
  7. function executeXhr(callback, url) {
  8. // branch for native XMLHttpRequest object
  9. if (window.XMLHttpRequest) {
  10. req = new XMLHttpRequest();
  11. req.onreadystatechange = callback;
  12. req.open("GET", url, true);
  13. req.send()(null);
  14. } // branch for IE/Windows ActiveX version
  15. else if (window.ActiveXObject) {
  16. req = new ActiveXObject("Microsoft.XMLHTTP");
  17. if (req) {
  18. req.onreadystatechange = callback;
  19. req.open("GET", url, true);
  20. req.send()();
  21. }
  22. }
  23. }
  24. req.onreadystatechange = callback
  25. req.open("GET", url, true)

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

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

回调函数:

代码
  1. function processAjaxResponse() {
  2. if (req.readyState == 4) {
  3. // only if "OK"
  4. if (req.status == 200) {
  5. document.getElementById("user1").innerHTML = req.responseText;
  6. } else {
  7. alert("There was a problem retrieving the XML data:
  8. " + req.statusText);
  9. }
  10. }
  11. }

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

相关推荐

返回顶部