在asp中用Microsoft.XMLHTTP异步获取远程文件的问题

Camelot 2004-10-12 11:09:39
代码如下:
<%
Set xml=Server.CreateObject("Microsoft.XMLHTTP")
xml.Open "GET","http://www.im286.com/",True
xml.OnReadyStateChange=GetRef("xmlstat")
xml.Send()
Set xml=Nothing
Function xmlstat()
Response.Write(xml.ReadyState &"<br>")
If xml.ReadyState=4 Then
Response.Write("成功")
End If
End Function
%>


可以发现这样完全不行,更本不会执行到Response.Write("成功")
要怎么做才可以啊。。。。
...全文
407 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级大笨狼 2004-10-17
  • 打赏
  • 举报
回复
<SCRIPT LANGUAGE="JavaScript">

function getData()
{
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

// 异步调用
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4) // 调用完毕
{
if (xmlhttp.status == 200) // 加载成功
{
var xmldoc = xmlhttp.responseXML;
var root = xmldoc.documentElement;

alert (xmldoc.xml);
}
}
}

var url = 'xml.asp';
xmlhttp.open("get", url, true);
xmlhttp.send();
}

</SCRIPT>


<BODY>

异步调用 xmlhttp 取后台数据
<input type="button" value="GetData" onclick="getData()">

<%
dim i, xml

xml = "<?xml version='1.0' encoding='gb2312' ?>"
xml = xml & "<data>"

for i = 1 to 50
xml = xml & "<record>记录" & i & "</record>"
next

xml = xml & "</data>"

response.ContentType = "text/xml"
response.write xml
%>
Camelot 2004-10-16
  • 打赏
  • 举报
回复
回firefoxh


可以直接调用http://www.im286.com/的,我试过的。


我是要放在服务器端运行的,试过多次,
readystate更本不会等于4,都是等于1,郁闷死,还想问一下,能不能在还没全部获取到文件之前先判断文件的大小呢?因为放在服务器端的话如果碰到文件过大,比如上了10M或100M的话那等于浪费了服务器的带宽了
tianch 2004-10-15
  • 打赏
  • 举报
回复
xml.Open "GET","http://www.im286.com/",false
yemolyuan 2004-10-13
  • 打赏
  • 举报
回复
好像应为安全的问题,新的ie补丁修改过这个xmlrequest的权限了。
你可以去微软的站点看看了
firefoxh 2004-10-13
  • 打赏
  • 举报
回复
一定会死掉?那就是你的程序无论如何都不能跳动readystate =4这个状态?

你在IE里面执行的话会有结果嘛?

晕死,我刚刚看了你的调用。你不能直接调用http://www.im286.com/,必须写一个完整的引用。
比如http://www.im286.com/index.asp必须这样才行。

你再试一试吧。肯定可以的。这个组件我一直用的。
_1_2_3_4 2004-10-12
  • 打赏
  • 举报
回复
<%
Set xml=Server.CreateObject("Microsoft.XMLHTTP")
xml.Open "GET","http://www.im286.com/",True

Response.write "--------1--------"

xml.OnReadyStateChange=GetRef("xmlstat")

Response.write "--------2--------"
xml.Send()

Response.write "--------3--------"

Set xml=Nothing
Function xmlstat()

Response.write "--------4--------"

Response.Write(xml.ReadyState &"<br>")
If xml.ReadyState=4 Then
Response.Write("成功")
End If
End Function
%>
Camelot 2004-10-12
  • 打赏
  • 举报
回复
我试过了,一定会死掉的。。。。。。。。。。如何设置超时呢?
firefoxh 2004-10-12
  • 打赏
  • 举报
回复
在异步返回的时候,的确会出现程序执行到接收ResponceText的时候,XMLHttp组件还没接收到回复.
所以程序要这样处理

Do until xmlhttp.readystate = 4
doevetns
loop

当然为了保证程序不陷入死循环,你在until里面最好在加上一个超时时间.
比如10s后还没有响应的,自动跳出Loop循环.
Camelot 2004-10-12
  • 打赏
  • 举报
回复
不行啊,只能执行到ponse.write "--------4--------"

Response.Write(xml.ReadyState &"<br>")


而xml.ReadyState怎么也不会等于4啊

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧