ajax 同步和异步XMLHTTP代码分析

在网页脚本编程中,绝大多数情况应该使用异步模式;同步模式将会挂起当前的脚本引擎,所以当你使用同步模式时,你应该明白自己要什么。而在C++开发中,同步模式应该是主流,如果一定要使用异步模式加回调,可以参考Using IXMLHTTPRequest onreadystatechange from C++一文。

下面是采用异步模式获取远程主机上RSS文件的代码,关键的地方是设置一个回调函数给IXMLHTTPRequest::onreadystatechange。为了防止脚本过早退到控制台,使用了asyncDone变量检测当前状态。当然,如果在网页中使用XMLHTTP,则不用这么麻烦——只要IE网页不关闭,回调函数不会退出。


代码如下:

var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.6.0");
var url = "http://www.jb51.net/rss.xml";

var asyncDone = false;

try {
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = onReadyStateChange;
xmlhttp.send(null);

// loop so that the program from quiting
while (!asyncDone) {
WScript.Sleep(100);
}

WScript.Echo(xmlhttp.responseText);
} catch (e) {
WScript.Echo(e);
}

function onReadyStateChange() {
WScript.Echo("readyState: " + xmlhttp.readyState);
if (xmlhttp.readyState == 4) {
asyncDone = true;
}
}

同步模式获取远程主机资源的代码要简单许多:

代码如下:

var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.6.0");
var url = "http://www.jb51.net/rss.xml";

try {
xmlhttp.open("GET", url, false);
xmlhttp.send(null);
WScript.Echo(xmlhttp.responseText);
} catch (e) {
WScript.Echo(e);
}

不过,如果在IE中使用同步模式,由于没有了回调的机制而且IE又不支持脚本开线程,脚本会被挂起直到XMLHTTP返回。注意,IE界面本身会被挂起。

同步还是异步,具体问题还要具体分析。

(0)

相关推荐

  • Jquery Ajax xmlhttp请求成功问题

    今天遇到了一个极其奇怪的问题,用各种工具检查都能看到服务器端返回了200,数据也是正常的,但是$.ajax 始终进不到success,郁闷啊,在网上找, 常见问题场景: 1.跨域: 2. $.ajax 没设置 dataType,及服务器端没设置respon.ContentType 3. Json结构错误: 第一第二很快就排除了,到了第三重新度了Json的定义:http://www.json.org/json-zh.html,重新复习了下Json的定义: 键值对:键为string,值(value)

  • ajax 入门基础之 XMLHttpRequest对象总结

    XMLHttpRequest 提供客户端同http服务器通讯的协议 一:创建 IE : http_request = new ActiveXObject("Msxml2.XMLHTTP"); http_request = new ActiveXObject("Microsoft.XMLHTTP"); 非IE: http_request = new XMLHttpRequest(); 二:onreadystatechange 指定当readyState属性改变时的事件

  • jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML

    摘要:本节补充ajax学习笔记1中 第二种方式:使用XMLHttpRequest对象的responseXML的方式来接受XML数据对象的DOM对象 在ajax学习笔记1中已经对准备工作和需要用到的知识做了比较详细的介绍,本节主要介绍需要修改的代码以及新增的代码 .新增一个servlet类 AJAXXMLServer.java 复制代码 代码如下: import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServle

  • Ajax通讯原理XMLHttpRequest

    显然AJax就是利用JavaScript脚本访问数据的一种技术. AJAX 使网页实现异步更新.这就是在不重新加载整个网页的情况下,对网页进行局部更新. XMLHttpRequest 是 AJAX 的关键 现在浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject). 向后台请求数据readyState有五个状态0:服务器未初始化,1:服务器连接已建立,2请求已接受收,3请求处理中,4请求完成. 每改变一次状态都好触发一次onreadystatec

  • AJAX在不同浏览器中XMLHttpRequest对象的生成示例

    复制代码 代码如下: <script type="text/javascript"> function ajax() { var xmlHttp; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }

  • Ajax核心XMLHttpRequest总结

    Ajax:即"Asynchronous JavaScript and XML"(异步JavaScript和XML),一门综合性的技术:运用JavaScript对象XMLHttpRequest进行异步数据交换:JavaScript操作DOM实现动态效果:运用XHTML+CSS表达信息:XML和XSLT操作数据.此篇文章重点介绍使用XMLHttpRequest对象与服务器端进行异步数据交换.     使用方法      XMLHttpRequest五步使用法: 复制代码 代码如下: 1.创

  • Ajax获取XMLHttp对象的方法

    本文实例讲述了Ajax获取XMLHttp对象的方法.分享给大家供大家参考,具体如下: Ajax 中要用到XMLHttp对象,我见过各种获取该对象的写法,觉得该写法最优雅.首先考虑到了适合不同的浏览器:其次考虑到了优先加载次序,从高版本向低版本试探,最后若还没找到,则抛出异常. function FactoryXMLHttpRequest() { if(window.XMLHttpRequest) { return new XMLHttpRequest(); }else if(window.Act

  • 通过XMLHttpRequest和jQuery实现ajax的几种方式

    示例一:利用Ajax来动态获取时间的例子. HTML代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h

  • Ajax创建XMLHttp对象的完美兼容性代码

    复制代码 代码如下: function creatajax(){ var ajax=null; if (window.XMLHttpRequest){ //对于Mozilla.Netscape.Safari等浏览器,创建XMLHttpRequest对象 ajax = new XMLHttpRequest(); if (ajax.overrideMimeType){ //如果服务器响应的header不是text/xml,可以调用其它方法修改该header ajax.overrideMimeType

  • Ajax xmlHttpRequest的status的值的含义

    xmlHttpRequest对象的status代表当前http请求的状态,是一个长整型数据,现在介绍一下它的含义. http请求状态及其含义表 1xx - 信息提示 100 - 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) 101 - 服务器将遵从客户的请求转换到另外一种协议.(HTTP 1.1新) 2xx - 成功 200 - OK 一切正常,对GET和POST请求的应答文档跟在后面. 201 - Created 服务器已经创建了文档,Location头给出了它的

随机推荐