Сегодня одна из самых странных вещей, которые я когда-либо видел. У меня есть петля на странице, которая выполняет синхронный запрос ajax для каждого элемента цикла. Так как это затягивало слишком долго, я решил остановить цикл, обновив страницу.Javascript - Loop продолжает работать после обновления страницы
При загрузке страницы я не мог щелкнуть по любому элементу страницы, поэтому я проверил консоль Firebug, и я увидел, что вызовы ajax предыдущего цикла все еще выполняются (цикл запускается после того, как я нажимаю на ссылку, поэтому он не может запускаться, как только загружается страница). Чтобы остановить цикл, мне пришлось закрыть текущую вкладку и открыть мою страницу в новой.
Стоит отметить, что у меня есть таблица данных на этой странице, и я включил возможность сохранения состояния таблицы, возможно, это мешает моему коду (сам цикл не является частью инициализации datatables, хотя он использует данные из таблицы).
Я также заметил, что некоторые вещи цикла не выполняются. Он должен был время от времени менять страницу данных, и она должна была быть написана на консоли javascript, и то, и другое не происходит после обновления страницы, вызовы ajax все еще продолжаются.
Вот код, в котором содержится цикл:
//This variable will contain a reference to the datatable
var oTable;
var isWorking=false;
//Change the datatables page
function changeTablePage(oTable, page, clear){
if(clear){
oTable.fnClearTable();
oTable.fnDraw();
}
oTable.fnPageChange(page);
}
//This part is inside a document.ready block
$(document).on("click", ".validation-all-click", function(event){
if(!isWorking){
isWorking=true;
//saves the current page, will be needed for later
var page=oTable.fnPagingInfo().iPage;
var numberPage=0;
var done=false;
while(!done){
console.log("page: "+numberPage);
changeTablePage(oTable, numberPage, false);
var nNodes = oTable.fnGetNodes();
var len=nNodes.length;
$('.validation-click', nNodes).each(function(index, value){
//id of the element to be validated
var id=$(value).data("rowid");
//Calls the validation url
$.ajax({
url: "/validate?id="+id,
async: false
});
});
//if the datatables page has 0 items, then it's done
if(len==0){
done=true;
}
numberPage++;
}
//goes back to the original page
changeTablePage(oTable, page, true);
isWorking=false;
}
});
Я не хочу, чтобы это поведение должно произойти, но я понятия не имею о том, почему это происходит и как предотвратить его
Маловероятно, что именно по этой причине вы видите то, что видите. Если вы хотите предоставить сокращенный случай, кто-то может помочь. – sabof
Я разместил код, в котором содержится цикл – valepu
Внешне он выглядит правильно. В моем подозрительном списке будет ошибка firbug. Возможно, даже ошибка Firefox. Тем не менее, ваш подход неправильный. Запросы должны быть асинхронными. Я использовал «async: false» для прототипирования. – sabof