Ajax 同一页面如何同时执行多个 XMLHTTP 呢,比如博客页,需要同时利用 Ajax 读取作者信息、文章信息、评论信息……
我们的第一反应可能是创建多个全局 XMLHTTP 对象,但这并不现实。其实实现方式非常简单,就是给 onreadystatechange 对应的回调函数加上参数,以下代码是解决方案中一个函数中的一段代码。
只是改写 onreadystatechange 的属性值,这样就可以为 OnReadyStateChng 函数赋参数了。如是我们写作 xmlhttp.onreadystatechange = OnReadyStateChng;,那么 OnReadyStateChng 就不能有参数了,也就无法获得是哪个 xmlhttp 的响应,也就无法获得是响应后要对哪个控件进行设置。
我们可以看一个完整的示例,前台页面是普通的 Ajax 技术的 HTML 页面,后台使用的是 ASP.NET 的 .aspx 文件,之所以采用 ASP.NET,是为了演示延时处理功能。
前台程序
后台程序
演示解说
前台页面发出三个异步回送请求,分别为 a1、a2、a3 请求值,在后台页面中,通过延时模拟处理 a1 需要 3 秒,处理 a2 需要 1 秒,处理 a3 需要 2 秒。通过演示发现最先有变化的是 a2,然后是 a3、a1,顺序并没有乱,也没有出现显示混乱的情况。注意后台页面需要 Response.Expires = 0; 这么一句代码指示页面立即过期,否则刷新时请求的是缓存的页面,演示也就没有效果了。
另外
每个 xmlhttp 的 onreadystatechange 对应的函数名称也可以不同,不仅限于参数不同。