我写了一个脚本,使用文件URL从网上下载文件。我有一个以下类型的ActiveXObject。
var objHTTP = new ActiveXObject("MSXML2.XMLHTTP");
objHTTP.open("GET", strFileURL, false);
它适用于小尺寸文件,文件大小小于100MB。但是当我尝试下载大小超过100MB的文件时,我的脚本被挂起了。然后我试了,
objHTTP.open("GET", strFileURL, true);
但在这种情况下,我们必须实现一个回调函数。我不知道如何实现回调然后使用它。有人可以帮助我。我正在使用TestComplete 7.我写的脚本;
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;
}
我不知道如何实现回调函数。有人能为我提供实施吗?
由于
答案 0 :(得分:0)
挂起可能是while循环等待readyState属性的特定值的结果。如果属性永远不会获得预期值之一,则脚本将永远有效。
我认为MSXML2.XMLHTTP对象无法加载大文件,也从未将readyState设置为脚本期望的值之一。要了解究竟发生了什么,我会检查该属性在很长一段时间后具有的值,这对于加载文件或尝试失败(例如2小时)来说已经足够了。如果您知道下载失败时readyState属性的值,您可以在脚本中处理它以避免挂起。
这就是悬挂本身。现在关于文件下载问题的原因。我找到了一个告诉问题的页面并建议设置更高的超时 - 看看: http://edgylogic.com/blog/downloading-large-files-vbscript/
示例在VBScript中,但使用JScript实现相同的方法应该很容易。请注意,该示例使用不同的COM对象--ServerXMLHTTP。你可以在这里阅读它(包括XMLHTTP的差异): http://msdn.microsoft.com/en-us/library/ms762278(v=VS.85).aspx
我希望这会有所帮助。