Scripting 如何实现文件下载的回调?

Scripting 如何实现文件下载的回调?,scripting,scripting-language,testcomplete,Scripting,Scripting Language,Testcomplete,我编写了一个脚本,使用文件URL从web下载文件。我有一个如下类型的ActiveXObject var objHTTP = new ActiveXObject("MSXML2.XMLHTTP"); objHTTP.open("GET", strFileURL, false); 它非常适合小文件,比如说,小于100MB的文件。但当我试图下载大于100MB的文件时,我的脚本挂起了。然后我试着 objHTTP.open("GET", strFileURL, true); 但是在这种情况下,我们

我编写了一个脚本,使用文件URL从web下载文件。我有一个如下类型的ActiveXObject

var objHTTP = new ActiveXObject("MSXML2.XMLHTTP");  
objHTTP.open("GET", strFileURL, false);
它非常适合小文件,比如说,小于100MB的文件。但当我试图下载大于100MB的文件时,我的脚本挂起了。然后我试着

objHTTP.open("GET", strFileURL, true);
但是在这种情况下,我们必须实现一个回调函数。我不知道如何实现回调并使用它。谁能帮帮我吗。我使用的是TestComplete7。我写的剧本

var objHTTP = new ActiveXObject("MSXML2.XMLHTTP"); 
  objHTTP.open("GET", strFileURL, true); 
  objHTTP.onreadystatechange = Callback; 
  objHTTP.send();  
  while((objHTTP.readyState != 4) && (objHTTP.readyState != 'complete'))  
  {   
    Delay(100); 
  }  
  if(200 != objHTTP.Status)  
  {  
    Log.Error("The " + strFileURL + " file was not found." + " The returned status is " + objHTTP.Status); 
    return;  
  }  
我不知道如何实现回调函数。有人能给我提供实施方案吗


很可能,挂起是while循环等待readyState属性的特定值的结果。如果属性从未获得预期值之一,则脚本将永远工作

我认为MSXML2.XMLHTTP对象无法加载大文件,并且从未将readyState设置为脚本期望的值之一。为了了解到底发生了什么,我会在很长时间后检查属性的值,这对于文件加载或尝试失败(比如说,2小时)都足够了。如果知道下载失败时readyState属性的值,可以在脚本中处理它以避免挂起

这就是绞刑本身。现在谈谈文件下载问题的原因。我找到了一个页面,上面讲述了这个问题,并建议设置更高的超时时间-请看:

这个例子是用VBScript编写的,但是用JScript实现同样的方法应该很容易。请注意,该示例使用了不同的COM对象-ServerXMLHTTP。您可以在这里了解它(包括与XMLHTTP的区别):


我希望这能有所帮助。

哦,很抱歉没有回答回拨的问题。虽然我不认为使用回调函数可以解决问题,但使用这种方法可以帮助您找到下载失败时设置的readyState属性的值。因此,它很简单:“objHTTP.onreadystatechange=onreadystatechange;”。此时,您需要在同一个单元中声明函数:函数OnReadyStateChange(){/*objHTTP必须是全局变量*/Log.Message(“readState更改为:“+objHTTP.readyState”);}感谢您的回复。问题不在while循环中。问题在于send方法,当我调试代码时,发现脚本挂起在send方法上。它甚至在while循环开始时都没有到达。嗯。。。然后它看起来像是组件中的一个bug。然后,我将尝试使用ServerXMLHTTP对象——根据描述,它使用不同的通信机制,因此可能会出现不存在问题的情况。这个组件在您的情况下工作吗?我没有检查ServerXMLHTTP。我会检查并更新。非常感谢你提出的宝贵建议。