社区
C#
帖子详情
100 分求助 XMLHTTP 异步 同步 奇怪现象。。。
youlei35
2010-08-10 11:00:22
我在VFP 中使用 xmlhttp 组件使用异步、同步操作没有问题。。
能正确返回 readyState 状态值。。
C# 中使用同步也没有问题。。。
但如果使用异步。。。 readyState 结果值一直会停留在 1
奇怪。。。。。。。。
...全文
183
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方法后,第二次就不管用了,连后台代码都没有跑进去。相关信息,我发布在Csdn论坛里
求助
了:
http
://community.csdn.net/Expert/topic/5141/5141454.
xml
?te
Ajax请求汇总(一)
刚开始结束Ajax请求的时候,那真的是迷迷糊糊,昏天暗地,通过学习的深入和翻阅各种资料、
求助
度娘,总结一下Ajax请求,与大家
分
享一下,希望能给学习Ajax的同学一些帮助,废话不多手,直接开始~~~ 一、Ajax请求的原理 1.原理:在Ajax请求中,html页面的中操作将通过Ajax引擎与服务器端进行通讯,然后将返回的结果提交到客户端页面的Ajax引擎,再由Ajax引擎来决定...
Ajax你需要系统的掌握 系统教程
相信大多数朋友都像我一样, AJAX的学习不是系统的学习的,如果你和我一样,看了无数的AJAX文章都没有了解AJAX的精髓,那么就请你把这一文章静下心来 掌握Ajax,第 2 部
分
: 使用 JavaScript 和 Ajax 发出
异步
请求多数 Web 应用程序都使用请求/响应模型从服务器上获得完整的 HTML 页面。常常是点击一个按钮,等待服务器响应,再点击另一个按钮,然后再等待,
Ajax 完整教程(转载)
第 1 页 Ajax 简介Ajax 由HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。本文的作者是一位 Ajax 专家,他演示了这些技术如何协同工作 —— 从总体概述到细节的讨论 —— 使高效的 Web 开发成为现实。他还揭开了 Ajax 核心概念的神秘面纱,包括
XML
Http
...
XML
HTTP
Request
XML
HTTP
Request
求助
编辑 百科名片
XML
Http
Request可以提供不重新加载页面的情况下更新网页,在页面加载后在客户端向服务器请求数据,在页面加载后在服务器端接受数据,在后台向客户端发送数据。
XML
Http
Request 对象提供了对
HTTP
协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。
XML
Http
Request 可
C#
110,539
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章