有没有办法告诉Web浏览器继续“卡住”的脚本?

时间:2011-08-25 20:49:59

标签: javascript

我已经创建了这个递归脚本来检查你的on的地址,然后检查另一个文件层次结构,如果你所在的那个文件夹,也存在于那个地方。例如,假设您在somerandomsite.com/example/folder/folder1/folder1_1上,然后您可能希望将用户重定向到somerandomsite.com/another/example/folder/folder1/folder1_1该文件夹存在,否则只是将他重定向到somerandomsite.com/another(当然我也有特殊情况,例如文件夹/ folder1 /存在但不是文件夹/ folder1 / folder1_1,然后重定向到somerandomsite.com/ 另一个 / example / folder / folder1 / etc.

现在我的问题,我有一个非常慢的递归实现,并说文件夹“example”中有50个文件夹,文件夹中有100个文件夹,folder1中有另外一个文件夹,最后一个级别有100个文件夹,那么我的实现需要很长时间才能“匹配”所有名称。

因此,某些浏览器会显示“某些脚本已停止工作”的错误消息,因为它需要很长时间才能执行。所以我的问题是,是否有某种方法告诉浏览器让脚本完成?

您可以找到the script here的代码。

对于那些如何执行目录搜索的人来说,我正在创建xmlhttprequests到文件夹,并获得显示所有文件夹的html版本,然后为每个文件夹级别进行简单的模式匹配。在上面的例子中,我做了4个xmlhttpRequests,

一到somerandomsite.com,模式匹配“示例”

针对“文件夹”的somerandomsite.com/example/ patternmatch

针对“folder1”

的somerandomsite.com/example/folder/ patternmatch

针对“folder1_1”

的somerandomsite.com/example/folder/folder1/ patternmatch

5 个答案:

答案 0 :(得分:3)

没有。该功能专为慢速脚本而设计,正如您承认的那样。由用户决定是否继续。如果有逃生舱,各种有害的剧本都会使用它。

答案 1 :(得分:1)

我怀疑AJAX调用会发生这种情况,因为在发出请求时没有实际的脚本运行。你是肯定的,你的代码中没有任何无限循环。

哦,您的代码存在问题:

handleXMLreadystatechange的事件处理程序,它调用checkState which spawns a timeout to call itself every second. So every time the state changes you spawn another repeating checkState.

你不需要checkState来调用它自己,因为handleXML已经调用它并且每次状态改变时都会调用它。此外,如果返回的状态不是200,则checkState将永远调用自身。我认为如果将checkState函数更改为:

,浏览器会更快乐
var checkState = function(xmlhttp, callback) {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        callback();
};

答案 2 :(得分:1)

好主,在服务器上这样做。您已经“在目录中获取目录的httprequest列表” - 只需在服务器上执行整个操作。

答案 3 :(得分:0)

没有。考虑使用Web Workers来完成工作。但要注意与旧浏览器的兼容性。

答案 4 :(得分:0)

脚本正在这样做,因为很多事情正在发生。

等待开始新的xmlhttprequest,直到上一个完成。

除了使用更快的浏览器之外,您无法强制脚本继续运行。