关于AJAX的原理如何做到异步和局部刷新实现代码的介绍
Overriew: onreadyStateChange被回调函数赋值,则能实现异步调用,回调函数直接操作DOM,则能实现局部刷新。那么XMLHttpRequest的onReadyStateChange如何知道服务ready了呢?状态如何change了呢(观察者模式)?则是通过客户端对服务的状态询问(定期轮询)所实现的。
详解:
1. XMLHttpRequest 负责与服务器端的通讯,其内部有很多重要的属性:readyStatus=4,status=200等等。当XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问(类似于客户端会轮询服务器的返回状态,仍然是http短连接,并非长连接的`服务器端push)请求状态,如果一切已经就绪(status=200),那么就执行需要的操作。
操作一般就是直接操作DOM,所以AJAX能做到所谓的“无刷新”用户体验。
lementById("user1")rHTML = "数据正在加载..."; if (us == 200) { e(onseText); }
2. 那么在AJAX客户端如何做到的异步呢?实际上就是Javascript的回调函数起的作用
提供一个回调JavaScript函数,一旦服务器响应可用,该函数就被执行
业务函数:
function castVote(rank) { var url = "/ajax-demo/"; var callback = processAjaxResponse; executeXhr(callback, url);}需要异步通讯的函数: function executeXhr(callback, url) { // branch for native XMLHttpRequest object if (ttpRequest) { req = new XMLHttpRequest(); adystatechange = callback; ("GET", url, true); ()(null); } // branch for IE/Windows ActiveX version else if (veXObject) { req = new ActiveXObject("TTP"); if (req) { adystatechange = callback; ("GET", url, true); ()(); } }}adystatechange = ("GET", url, true)
第一行定义了JavaScript回调函数,一旦响应就绪它就自动执行,而()方法中所指定的“true”标志说明想要异步执行该请求。
一旦服务器处理完XmlHttpRequest并返回给浏览器,使用adystatechange指派所设置的回调方法将被自动调用。
回调函数:
function processAjaxResponse() { if (yState == 4) { // only if "OK" if (us == 200) { lementById("user1")rHTML = onseText; } else { alert("There was a problem retrieving the XML data:" + usText); } }}
-
WAP的简介
WAP协议被设计用来在无线客户端(比如移动电话)上展示因特网内容。您应当具备的基础知识在继续学习之前,您需要对下面的知识有基本的了解:WWW,HTML以及有关网页构建的基础知识JavaScriptXML如果您希望首先学习这些项目,请在我们的首页访问这些教程。什么是WAP?无线产...
-
如何理解Javascript的caller,callee,call,apply区别
在提到上述的概念之前,首先想说说javascript中函数的隐含参数:argumentsarguments该对象代表正在执行的函数和调用它的函数的参数。[function.]arguments[n]参数function:选项。当前正在执行的Function对象的名字。n:选项。要传递给Function对象的从0开始的参数值...
-
WAP教程:WML 链接和图像
链接可以制作WML卡片来显示WML的锚功能,图像可以制作WML卡片来显示图像.链接可以制作WML卡片来显示WML的锚功能。标签总是要规定一个任务("go","prev",或"refresh")。任务定义了当用户选择此链接时要做的事情。在本例中,当用户选择"Nextpage",其任务是"前往":Next...
-
JavaScript插件化开发方式
一,开篇分析今天这篇文章我们说点什么那?嘿嘿嘿。我们接着上篇文章对不足的地方进行重构,以深入浅出的方式来逐步分析,让大家有一个循序渐进提高的过程。废话少说,进入正题。让我们先来回顾一下之前的Js部分的代码,如下:复制代码代码如下:functionItemSelector(elem,o...