Я пытаюсь сломать для цикла (с маркировкой) во вложенном анонимной функции, например:Перерыв на цикл из анонимной функции
function ajax(iteration, callback) {
var rtrn, xh;
if (window.XMLHttpRequest) {
xh = new XMLHttpRequest();
} else {
xh = new ActiveXObject("Microsoft.XMLHTTP");
};
xh.onreadystatechange = function() {
if (xh.readyState == 4 && xh.status == 200) {
callback(xh.responseText);
};
};
xh.open("GET", "file.php?i=" + iteration, true);
xh.send();
};
var atk_delay = 100;
loop:
for(i = 1; i <= 40; i++) {
var to = atk_delay * i;
setTimeout(
function() {
ajax(i, function(responseText) {
var div = document.getElementById("combat");
div.innerHTML += responseText;
var arrRt = responseText.split("::");
if(arrRt[0] == "stop") {
break loop;
};
});
},
to);
};
Я действительно понятия не имею, как решить это. Очевидно, проблема заключается в том, что он не может найти метку. Как я могу это решить?
Я отредактировал вопрос, так как на этикетке было неправильное имя. Теперь код такой, какой у меня есть. –
Знаете ли вы, что когда вы дойдете до точки, где хотите ее разбить, цикл уже остановился? – kapa
'setTimeout' и' ajax', очевидно, асинхронны, логика внутри обратного вызова возникает после завершения цикла, а 'i' теряется из-за новой области. Таким образом, здесь есть две проблемы: [«Проблемная ошибка JavaScript»] (http://stackoverflow.com/questions/1451009/javascript-infamous-loop-problem) и [«Как вернуть ответ от вызова AJAX "] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – elclanrs