用javascript读取一个xml文件,如何判断读取完成?

DDRinDOOL 2004-10-20 10:47:08
小弟想用javascript读取一个xml文件,在IE上用
this.xmlDoc= new ActiveXObject("Microsoft.DomDocument");
this.xmlDoc.load(url);
然后用一个while循环判断this.xmlDoc.readyState来判断。还需要time-out机制。
代码如下:
var today = new Date();
var now = today.getTime();
while(1)
{
//alert(this.xmlDoc.readyState);
var today2 = new Date();
var now2 = today2.getTime();
if((now2 - now) > 500 || (this.xmlDoc.readyState == 4))
{
alert(now2 - now);
return;
}
}
文件很小,50miliseconds就足够。
但是,我发现每次都是在time-out以后退出,alert出来的总超过500,甚至把500换成5000,还是这样,IE hang住5秒。
我没设xmlDoc.async,是不是因为while循环占用cpu,使得读取xml文件的线程没有完成?
如果设成async = false.那我怎么time-out读取的过程?

在NS,mozilla里更糟,只能:
this.xmlDoc = document.implementation.createDocument("","doc",null);
this.xmlDoc.load(url);
还有没有readyState可以check.

请教各位大侠有河良策?
多谢。
...全文
215 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
DDRinDOOL 2004-11-02
  • 打赏
  • 举报
回复
孟子E章兄,
你的方法可以发送request,但是发送完成以后立刻就退出了函数,我通过发个request传送一些数据给服务器,这就足够了。但是我要在page onunload时候发,而如果用户关闭浏览器窗口,request还没来得及发document就被卸载了。所以偶想在MakeRequest函数里等一下或者time-out,但是while循环导致script engine忙而没空设置readyState,所以变成永远被time-out,请问有何高见?
孟子E章 2004-10-26
  • 打赏
  • 举报
回复
NetScape下用

XMLHttpRequest

if (window.netscape && netscape.security && netscape.security.PrivilegeManager.enablePrivilege) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead UniversalBrowserWrite');
}

var url = 'http://dotnet.aspx.cc/content.aspx';

var httpRequest;

if (window.XMLHttpRequest) {
httpRequest = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
httpRequest = new ActiveXObject('Msxml2.XMLHTTP');
}
httpRequest.open('GET', url, true);

httpRequest.onreadystatechange = function (evt) {
if (httpRequest.readyState == 4) {
alert(httpRequest.responseText);
}
};

httpRequest.send(null);
skyover 2004-10-26
  • 打赏
  • 举报
回复
ReadyState==4
孟子E章 2004-10-26
  • 打赏
  • 举报
回复
http://blog.csdn.net/net_lover/archive/2004/07/07/36015.aspx
http://blog.csdn.net/net_lover/archive/2004/07/06/35220.aspx
tianch 2004-10-20
  • 打赏
  • 举报
回复
this.xmlDoc= new ActiveXObject("Microsoft.DomDocument");
xmlDoc.onreadystatechange=isseccuss;
this.xmlDoc.load(url);
function isseccuss(){
if(xmldom.readyState==4){
alert("读取完成");
}
}
DDRinDOOL 2004-10-20
  • 打赏
  • 举报
回复
小弟的用意主要是在进行下一步动作之前等上0.5秒,不仅仅是检查readyState,和设置timeout.
尤其NS,firefox上不支持readyState.
除了用while循环等,有什么办法吗?
flyskytoday 2004-10-20
  • 打赏
  • 举报
回复
var xmlDoc = new ActiveXObject("microsoft.xmldom");
xmlDoc.load("aaaaa.xml");
function loadxml()
{
if(xmlDoc.readyState == "4")//判断
//0为对象已创建但XML还未装载 1为已装载还未语法分析 2为已装载已分析但还未可用 3为已执行,但XML文档是只读 4为XML文档装载好
start();
else
window.setTimeout("loadxml()",4000);
}
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2004-10-20 10:47
社区公告
暂无公告