社区
C#
帖子详情
100 分求助 XMLHTTP 异步 同步 奇怪现象。。。
youlei35
2010-08-10 11:00:22
我在VFP 中使用 xmlhttp 组件使用异步、同步操作没有问题。。
能正确返回 readyState 状态值。。
C# 中使用同步也没有问题。。。
但如果使用异步。。。 readyState 结果值一直会停留在 1
奇怪。。。。。。。。
...全文
198
21
打赏
收藏
100 分求助 XMLHTTP 异步 同步 奇怪现象。。。
我在VFP 中使用 xmlhttp 组件使用异步、同步操作没有问题。。 能正确返回 readyState 状态值。。 C# 中使用同步也没有问题。。。 但如果使用异步。。。 readyState 结果值一直会停留在 1 奇怪。。。。。。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
youlei35
2010-08-24
打赏
举报
回复
结贴的时候怎么看到有的楼被斑竹删除? 好象没有不愉快的回复啊。。。
youlei35
2010-08-17
打赏
举报
回复
悲剧。。。同步还的用一阵子了。。。
Angelicer
2010-08-15
打赏
举报
回复
初学者,学习‘
studentliudong
2010-08-15
打赏
举报
回复
睡前学习+帮顶
youlei35
2010-08-15
打赏
举报
回复
没人讨论就结贴了。。。
youlei35
2010-08-11
打赏
举报
回复
不好意思。。之前没发过代码,没注意到可以用UUB 修饰。。。
youlei35
2010-08-11
打赏
举报
回复
[Quote=引用 9 楼 a184485789 的回复:]
有没有代码啊,发出来看看嘛
[/Quote]
谢谢, 注明:下面的VFP 代码可直接运行,没有问题。。
C# 代码为主要部分。
VFP 代码
Set Safety Off
sUrl = "http://dbis.ucdavis.edu/courses/sqltutorial/tutorial.pdf?time=12eee122"
Flag = .F.
CLEAR
ReadyState = ''
m.oXML = Createobject("msxml2.XMLHTTP")
m.oXML.open("get",sUrl,.t.)
m.oXML.SetRequestHeader("content","text/html")
m.oXML.SetRequestHeader("charset","gb2312")
*Wait Windows 'Begin Download document!'
m.oXML.send()
Do While .T.
Try
m.ReadyState = m.oXML.ReadyState
?m.ReadyState
Catch
m.ReadyState = 0
Endtry
IF m.ReadyState>=3
try
?m.oXML.ResponseText
CATCH
?"NO"
endtry
Endif
If m.ReadyState=4
Exit
Endif
EndDo
?m.oXML.ResponseText
C# 代码:
MSXML2.XMLHTTP oXML = new MSXML2.XMLHTTP();
switch(emType)
{
case HTMLPOSTTYPE.GET:
oXML.open("get", tsUrl,true, null, null);
setRequestHeads(emType,0);
try
{
oXML.send(null);
}
catch(Exception ee)
{
OUTPUT("GET ERROR: " + ee.StackTrace + " " + ee.Source.ToString() + " " + ee.Message);
return -1;
}
break;
case HTMLPOSTTYPE.POST:
oXML.open("post", tsUrl, false, null, null);
setRequestHeads(emType,tsPostData.Length);
try
{
oXML.send(tsPostData);
}
catch (Exception ee)
{
OUTPUT("POST ERROR:" + ee.StackTrace + " " + ee.Source.ToString() + " " + ee.Message);
return -1;
}
break;
}
while (true)
{
try
{
System.Threading.Thread.Sleep(100);
nReadState = oXML.readyState;
_TsDiff = DateTime.Now.Subtract(_dtBeginRun);
if (_TsDiff.TotalSeconds > 120)
{
nErrorCode = -11; //timeout
break;
}
if (nReadState >= 3)
{
_o = oXML.getResponseHeader("Content-Length");
if (_o.ToString().Trim() != "")
{
nLength = Convert.ToDouble(_o);
}
sResonseHeadType = oXML.getResponseHeader("Content-Type");
}
}
catch (Exception ee)
{
nReadState = 0;
}
if (nReadState == 4)
{
nDownLoadFile = ((Byte[])oXML.responseBody).Length;
break;
}
else
{
switch (nReadState)
{
case 0:
break;
}
}
}
a184485789
2010-08-11
打赏
举报
回复
有没有代码啊,发出来看看嘛
lilin8905
2010-08-11
打赏
举报
回复
学习。
porschev
2010-08-11
打赏
举报
回复
youlei35
2010-08-11
打赏
举报
回复
[Quote=引用 13 楼 sp1234 的回复:]
引用 2 楼 youlei35 的回复:
其实也可以,但没必要
假设你愿意尝试,也许3分钟就解决了,也用不着csdn上浪费这么多时间。
思路决定结果,而不仅仅是编写代码。
[/Quote]
我已经尝试很多次了。。。。。 同步的方法已经用了1年多了。。
一直想改成异步的方式(主要想解决超时的问题。)
最初我用VFP的COM 来实现功能,很好用,但VFP COM 在多应用程序域+多线程 下 运行库显得不稳定。。
所以改用C# 编写相同功能的模块。。 但发现如上问题。。。。
jzh612785
2010-08-11
打赏
举报
回复
楼上这为仁兄说得是相当的对
以专业开发人员为伍
2010-08-11
打赏
举报
回复
你成功了(实在是太简单了就能成功了),再来讨论技术,会更直接一些。
以专业开发人员为伍
2010-08-11
打赏
举报
回复
[Quote=引用 2 楼 youlei35 的回复:]
其实也可以,但没必要[/Quote]
假设你愿意尝试,也许3分钟就解决了,也用不着csdn上浪费这么多时间。
思路决定结果,而不仅仅是编写代码。
youlei35
2010-08-11
打赏
举报
回复
100 分顶起。。。
youlei35
2010-08-10
打赏
举报
回复
[Quote=引用 1 楼 jiuchongtiann 的回复:]
不可能吧,应该是你没有调用send方法,所有状态停留在1。
五种状态如下:
0 对象已创建,但没有调用open()方法
1 open()已调用
2 send()方法已调用
3 浏览器已经收到服务器发来的http头部
4 浏览器已经收到服务器的全部数据,与服务器连接已关闭。
[/Quote]
谢谢回复。。 我已经Open,并且Send了
由于winform 中不能对 xmlhttp 设置回调函数(其实也可以,但没必要)
所以我用while 对 xmlhttp 的 readyState 进行分析,如果 =4 或者 超时就会退出循环。
可发现状态一直都是1.。。。
相比我用VFP 测试。。完全没有问题。。 状态从 1,2,3,4 都是正常的。
solibear
2010-08-10
打赏
举报
回复
不可能吧,应该是你没有调用send方法,所有状态停留在1。
五种状态如下:
0 对象已创建,但没有调用open()方法
1 open()已调用
2 send()方法已调用
3 浏览器已经收到服务器发来的http头部
4 浏览器已经收到服务器的全部数据,与服务器连接已关闭。
关于Ajax连续
异步
调用失败的疑惑
终于尝试用AjaxPro了,真的很好用,比起以前 自己构造
Xml
Http
方便多了。但是就在我用的不亦乐乎的时候,发现突然的某块功能不好使了。跟踪发现,在我的脚本里连续调用Ajax方法后,第二次就不管用了,连后台代码都...
Ajax请求汇总(一)
刚开始结束Ajax请求的时候,那真的是迷迷糊糊,昏天暗地,通过学习的深入和翻阅各种资料、
求助
度娘,总结一下Ajax请求,与大家
分
享一下,希望能给学习Ajax的同学一些帮助,废话不多手,直接开始~~~ 一、Ajax请求的...
Ajax你需要系统的掌握 系统教程
相信大多数朋友都像我一样, AJAX的学习不是系统的学习的,如果你和我一样,看了无数的AJAX文章都没有了解AJAX的精髓,那么就请你把这一文章静下心来 掌握Ajax,第 2 部
分
: 使用 JavaScript 和 Ajax 发出
异步
请求...
Ajax 完整教程(转载)
第 1 页 Ajax 简介Ajax 由HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。...他还揭开了 Ajax 核心概念的神秘面纱,包括
XML
Http
...
XML
HTTP
Request
求助
编辑 百科名片
XML
Http
Request可以提供不重新加载页面的情况下更新网页,在页面加载后在客户端向服务器请求数据,在页面加载后在服务器端接受数据,在后台向客户端发送数据。
XML
Http
Request 对象提供了...
C#
111,119
社区成员
642,545
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章