ServerXMLHTTP下的同步和异步有什么区别

jielei 2013-11-30 04:24:12
同步发送请求

Function PostHttpPage(PostUrl,PostData) 
Dim xmlHttp
Dim RetStr
Set xmlHttp = CreateObject("Msxml2.ServerXMLHTTP")
xmlHttp.setTimeouts 30000,30000,30000,60000
'On Error Resume Next
xmlHttp.Open "POST", PostUrl, true
XmlHTTP.setRequestHeader "Content-Length", Len(PostData)
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"
xmlHttp.Send PostData
If Err.Number <> 0 Then
Set xmlHttp=Nothing
PostHttpPage = "$False$"
Exit Function
End If
PostHttpPage= "$False$"
Set xmlHttp = nothing
End Function


下面是异步发送请求
Dim xmlServerHttp
set xmlserverhttp = server.createobject("MSXML2.ServerXMLHTTP")
xmlServerHttp.open "GET", "http://localhost/receiver.asp", true
xmlServerHttp.send

While xmlServerHttp.readyState <> 4
xmlServerHttp.waitForResponse 1000
Wend

response.contenttype = "text/html"
response.write "Receiver Page: " & xmlServerHttp.responseText & "<br/>"



这两者在应用上有什么区别,,因为异步请求在xmlServerHttp.readyState <> 4时候程序依然不会往下执行,请哪位朋友帮我解释一下,或者要怎么做才可以使异步传输只要发送请求后就不管返回状态,继续执行下面的语句!我测试了一下,异步传输如果把下面几行去掉就请求不成功
While xmlServerHttp.readyState <> 4
xmlServerHttp.waitForResponse 1000
Wend
...全文
1295 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
luok 2014-04-26
  • 打赏
  • 举报
回复
如果想取得返回结果,用同步比较好,异步的后面还是要用代码控制,等待返回结果。 2者效率差不多,异步控制不好抓不到数据。 如果你不在乎返回结果,可以用异步。
jingnidai 2014-01-29
  • 打赏
  • 举报
回复
关于楼主的“不想要异步”的问题,只需要把open的参数改一下: Dim xmlServerHttp set xmlserverhttp = server.createobject("MSXML2.ServerXMLHTTP") xmlServerHttp.open "GET", "http://localhost/receiver.asp", false xmlServerHttp.send 'While xmlServerHttp.readyState <> 4 ' xmlServerHttp.waitForResponse 1000 'Wend response.contenttype = "text/html" response.write "Receiver Page: " & xmlServerHttp.responseText & "<br/>"
妖尾_火龙 2013-12-31
  • 打赏
  • 举报
回复
路过
xdfd 2013-12-31
  • 打赏
  • 举报
回复
这个我曾经纠结了好几个月本来都写好的QQ的和BAIDU的api都因为POST的时候时间问题而不稳定给搞郁闷了,我找到了方法但还没时间测试,等测试完了再发出来,可继续关注这个。
Anlige 2013-12-17
  • 打赏
  • 举报
回复
死循环只是为了等待异步完成~和同步的效果应该是一样的,服务器端,我个人都用同步
jielei 2013-12-14
  • 打赏
  • 举报
回复
引用 9 楼 showbo 的回复:
要判断readyState是否为4,4是已经加载完成的状态,如果不是4就继续等待 receiver.asp

if request.querystring("xhr")="1" then'''''''xhr请求
  response.write now
  response.end
end if

Dim xmlServerHttp
set xmlserverhttp = server.createobject("MSXML2.ServerXMLHTTP")
xmlServerHttp.open "GET", "http://localhost/receiver.asp?xhr=1", true
xmlServerHttp.send
  
While xmlServerHttp.readyState <> 4
    xmlServerHttp.waitForResponse 1000
Wend
  
response.contenttype = "text/html"
response.write "Receiver Page: " & xmlServerHttp.responseText & "<br/>"
这个测试了没问题
但是这样的话状态不等于4就会一直在循环里面,没办法向下执行,这个和同步方式有什么区别呢?
Go 旅城通票 2013-12-09
  • 打赏
  • 举报
回复
要判断readyState是否为4,4是已经加载完成的状态,如果不是4就继续等待 receiver.asp

if request.querystring("xhr")="1" then'''''''xhr请求
  response.write now
  response.end
end if

Dim xmlServerHttp
set xmlserverhttp = server.createobject("MSXML2.ServerXMLHTTP")
xmlServerHttp.open "GET", "http://localhost/receiver.asp?xhr=1", true
xmlServerHttp.send
  
While xmlServerHttp.readyState <> 4
    xmlServerHttp.waitForResponse 1000
Wend
  
response.contenttype = "text/html"
response.write "Receiver Page: " & xmlServerHttp.responseText & "<br/>"
这个测试了没问题
jielei 2013-12-08
  • 打赏
  • 举报
回复
跪求答案啊!
jielei 2013-12-06
  • 打赏
  • 举报
回复
跪求答案啊!
jielei 2013-12-01
  • 打赏
  • 举报
回复
	Dim xmlServerHttp
	set xmlserverhttp = server.createobject("MSXML2.ServerXMLHTTP")
	xmlserverhttp.setTimeouts 30000,30000,30000,60000 
	xmlServerHttp.open "GET", "http://www.baidu.com", true
	xmlServerHttp.send
	While xmlServerHttp.readyState <> 2 
		xmlServerHttp.waitForResponse 1000
	Wend
发现这是个死循环!
jielei 2013-12-01
  • 打赏
  • 举报
回复
求解啊,谁帮我解决一下!
bigedge 2013-12-01
  • 打赏
  • 举报
回复
幫頂了,正好學習
jielei 2013-12-01
  • 打赏
  • 举报
回复

Dim xmlServerHttp
set xmlserverhttp = server.createobject("MSXML2.ServerXMLHTTP")
xmlserverhttp.setTimeouts 30000,30000,30000,60000 
xmlServerHttp.open "GET", "http://www.baidu.com", true
xmlServerHttp.send
While xmlServerHttp.readyState <> 2 
    xmlServerHttp.waitForResponse 1000
Wend
大哥,这是个死循环,为什么会这样呢,xmlServerHttp.readyState =1,按照您的说法调用send函数后应该xmlServerHttp.readyState 就等于2了啊
  • 打赏
  • 举报
回复
While xmlServerHttp.readyState <> 2 xmlServerHttp.waitForResponse 1000 Wend 4的话是代表提交之后返回结果也完成了,有时返回的内容有几百K需要10秒,20秒,,所以只需要提交成功就跳过,具体看我的博客文章 XMLHTTP.readyState的五种状态 http://blog.csdn.net/xiaoyao961/article/details/17044503
  • 打赏
  • 举报
回复
While xmlServerHttp. <> 2 xmlServerHttp.waitForResponse 1000 Wend 4的话是代表提交之后返回结果也完成了,有时返回的内容有几百K需要10秒,20秒,,所以只需要提交成功就跳过,具体看我的博客文章 XMLHTTP.readyState的五种状态 http://blog.csdn.net/xiaoyao961/article/details/17044503

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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