当我尝试使用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+"¶m2="+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);
}
答案 0 :(得分:6)
由于Ajax调用是异步的,所以你的循环已经很久很久了。分配给onreadystatechange
的函数将在未来调用。你的for
循环运行完成,所有ajax调用已经被启动,然后它们将逐个完成,因为系统会收到响应。
也许您并不了解默认情况下Ajax调用是异步的。这意味着for
循环启动每个ajax调用并继续运行(并启动所有ajax调用),而ajax调用由其他地方的服务器处理。然后,在for
循环结束后的一段时间后,将调用onreadystatechange
回调,指示其中一个ajax调用现已完成。在这一点上停止for
循环已经太晚了。
如果你更好地解释你想要完成的事情,我们可以帮助你做到这一点。例如,如果您想发送一个ajax调用,检查其结果,然后决定是否要继续进行更多的ajax调用,那么您就无法使用for
循环来启动它们。你必须通过执行一次ajax调用来迭代,然后当它完成时,你根据完成回调中的结果决定是否调用下一个等等。