xh = new ActiveXObject("Microsoft.XMLHTTP");
function ObjDown$Save($ServerUrl,$LocalUrl){this.objStream = new ActiveXObject("ADODB.Stream");
this.strServer = $ServerUrl;
this.Local = $LocalUrl;this.GetFile = function(){
xh.onreadystatechange = this.GetReady;
xh.open("GET",this.strServer,true);
xh.send();
}this.GetReady = function(){
if(xh.readyState==4)
{
if(xh.status==200)
{this.SetFile();return true;}
else
{return false;}
}
else
{return false;}
}this.SetFile = function(){
var imgs = this.xh.responseBody;
this.objStream.Type = 1;
this.objStream.Open();
this.objStream.write(imgs);
this.objStream.SaveToFile(tofile,2);
this.objStream.Close();
}
}
function ObjDown$Save($ServerUrl,$LocalUrl){this.objStream = new ActiveXObject("ADODB.Stream");
this.strServer = $ServerUrl;
this.Local = $LocalUrl;this.GetFile = function(){
xh.onreadystatechange = this.GetReady;
xh.open("GET",this.strServer,true);
xh.send();
}this.GetReady = function(){
if(xh.readyState==4)
{
if(xh.status==200)
{this.SetFile();return true;}
else
{return false;}
}
else
{return false;}
}this.SetFile = function(){
var imgs = this.xh.responseBody;
this.objStream.Type = 1;
this.objStream.Open();
this.objStream.write(imgs);
this.objStream.SaveToFile(tofile,2);
this.objStream.Close();
}
}
解决方案 »
- 头大死了~~~~求解。。水深火热!!
- jquery操作 checkbox的checked的值不管是什么都是选中状态。。。急。。。
- 页面任何一个input 状态改变都触发事件??
- sos
- JS高手请进,问题解决全分奉上
- 正则表达式
- jsp如何获取$.post传递的参数
- 音源重复播放
- 怎样判断鼠标对td的操作是onclick,onmouseover,还是onmouseout呀?立即给分!!!!!!!
- 如和执行一个串里的代码,如var str="document.Form1.Date.value=100";
- *******请用过htmlarea控件的朋友进来看一下这个小问题,谢谢!!************
- 如何取消关闭窗口?
我现在需要一次下载多的文件,单独用了上面几个函数发觉:
下载一个文件很正常。
但是如果下载多个文件:通常后面的代码比前面的代码执行的要快,
主要是xh.send发送的太快了,以至通常后面的responseBody会代替前面的responseBody!
而且用setTimeout也没什么用处。所以我想用类的方法将xmlhttp分开执行试试看,楼上的代码由于xh是全局变量,所以下载一个文件
应该没有问题,但是下载多个文件就不对了,原理同上。有没有其他什么办法,能使多个文件类似多个线程执行的方法,彼此不要干扰,请教大家了,分数不够还可以加。
------------------------
xh.onreadystatechange = this.GetReady;
xh.open("GET",this.strServer,true);
xh.send();if(xh.readyState==4)
{
if(xh.status==200)
{this.SetFile();return true;}
else
{return false;}
}
else
{return false;}
onreadystatechange事件好象是等当status变化的时候触发,也就是send过程到获取数据
不是定时的,是不知道时间的。而只有不停检验状态位,才可能拿到responseBody呀。诶,好郁闷呀,楼上的和楼上的楼上能不能还有好的方法解决
小弟跪谢啦。
我要学习学习,多谢
--------------------------------
while (xmlServerHttp.readyState != 4) {
xmlServerHttp.waitForResponse(1000);
}客户端则没有这样一个方法,所以我估计这个状态是由xmlhttp针对每次请求自己维护的,你在客户端可不需检测readyState
----------------
... ...
XmlHttp.Open( "POST", url, false )
XmlHttp.setRequestHeader( "Content-Type","text/XML" )
XmlHttp.Send( xml ) if (XmlHttp.status != 200 || XmlHttp.responseXML.xml == "")
{
showContent(XmlHttp.responseText)
return false
} switch (method)
{
case 'selectdata':
XmlData.loadXML(XmlHttp.responseXML.xml);
break;
case 'selectoptions':
case 'selectoptions2':
if (XmlSelectData == null)
XmlSelectData = new ActiveXObject("MSXML.DOMDocument") XmlSelectData.loadXML(XmlHttp.responseXML.xml);
break;
default:
XmlDoc.loadXML(XmlHttp.responseXML.xml);
} return true
... ...
发觉:
我用的是异步方式XmlHttp.Open( "GET", url, true )
其实需要的是同步方式方式去获得就可以啦XmlHttp.Open("GET",url,false)解释如下:
async 一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作 多谢了,呵呵