qwa*_*waz 0 javascript loops for-loop
当我尝试从函数中断出父循环时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);
}
Run Code Online (Sandbox Code Playgroud)
因为Ajax调用是异步的,所以你的循环已经很久很久了.分配给的函数onreadystatechange将来会被调用.你的for循环运行完成,那时所有的ajax调用都已经启动,然后它们将逐一完成,因为系统会收到响应.
也许您不明白默认情况下Ajax调用是异步的.这意味着for循环启动每个ajax调用并继续运行(并启动所有ajax调用),而ajax调用由其他地方的服务器处理.然后,在for循环完成后的一段时间后,将onreadystatechange调用回调,指示其中一个ajax调用现已完成.在这一点上停止for循环已经太晚了,因为它已经完成了.
如果你更好地解释你想要实现的目标,我们可以帮助你做到这一点.例如,如果你想发送一个ajax调用,检查它的结果,然后决定是否要继续更多的ajax调用,那么就不能使用for循环来启动它们.您将不得不通过执行一次ajax调用进行迭代,然后当完成该调用时,您将根据其在完成回调中的结果来决定是否调用下一个调用,依此类推.