2014-09-30 89 views
0

打破循环的JavaScript当我试图摆脱功能母环与break - 它提供了以下错误:如何从嵌套函数

Uncaught SyntaxError: Illegal break statement

下面的代码的相关部分:

for (var i = 0; i < filesLength; i++) { 
     myFunc(arg1, arg2, i); 
    } 


function myFunc (arg1, arg2, i) { 
    var qr = "param1="+arg1+"&param2="+arg2; 
    getParam = new XMLHttpRequest(); 
    getParam.open("POST", "file.php"); 
    getParam.send(qr); 

    getParam.onreadystatechange = (function(getParam){ 
     return function() { 
      if(getParam.readyState == 4){ 
       var res = getParam.responseText; 
       if (res == '') { 
        // do something... 
        break; << THIS ONE 
       } 
      } 
     } 
    })(getParam); 
} 
+1

怎么样返回false? – ManirajSS 2014-09-30 19:48:53

+5

它是异步的,所以在ajax调用完成的时候,要迟到才会破坏任何东西。 – adeneo 2014-09-30 19:48:57

+0

我试过返回false,它没有切断它。 – qwaz 2014-09-30 19:49:30

回答

6

你的循环已经很长很长时间了,因为Ajax调用是异步的。分配给onreadystatechange的功能将来会被调用。您的for循环运行完成,并且所有ajax调用在那段时间都已启动,并且随着系统收到响应,它们将逐个完成。

也许你不明白,默认情况下,Ajax调用是异步的。这意味着for循环开始每个ajax调用并继续运行(并启动所有ajax调用),而ajax调用由其他位置的服务器处理。然后,在for循环结束后的某段时间,将调用onreadystatechange回调函数,指示其中一个ajax调用已完成。因为它已经完成,所以要停止for循环已经太迟了。


如果你更好地解释你正在努力完成什么,我们可以帮助你做到这一点。例如,如果您想发送一个ajax调用,检查其结果,然后决定是否要继续使用更多的ajax调用,那么您不能使用for循环来启动它们。你将不得不通过做一个ajax调用来迭代,然后当这个调用完成时,你根据它在完成回调中的结果来决定是否调用下一个,等等。

+0

我不知道。现在我明白了。感谢您的信息。 – qwaz 2014-09-30 19:52:14

+0

你的想法听起来不错。我会做的。非常感谢。 – qwaz 2014-09-30 20:00:20