Я сделал обходной путь для этого, добавив специальное имя класса в div в конце шаблона тимелист, который появляется только после успешного завершения. Затем я запускаю пользовательское событие, которое отключается и проверяет наличие этого класса каждые несколько секунд, используя задержку.
Я не понимаю закулисных магов c, происходящих здесь, но то, что я заметил, было похоже на то, что работал только один поток, и некоторое время l oop без задержки, которая проверяла наличие Существование класса по существу блокировало бы сценарий, так что таблица никогда не будет сгенерирована, а класс, который он ищет, никогда не вставляется.
В любом случае, вот сценарии JQuery, которые я использовал:
<script>
$(document).on('click', function(event) {
var editor = ace.edit("editor");
if (event.target.id == "querySubmit" && !editor.getReadOnly()) {
editor.setReadOnly(true);
editor.setTheme("ace/theme/clouds");
var urlString = "runQuery?sqlField=" + encodeURI(editor.getValue()) +
"&dbSelection=" + encodeURI($("#dbSelection option:selected").text());
$.get(urlString, function (fragment) { // get from controller
$("#resultTable").replaceWith(fragment);
});
$(document).trigger("one:queryReturned");
}
});
</script>
<script>
$(document).on("one:queryReturned", function(event) {
if($(".complete").length === 0){
setTimeout(function () {
$(document).trigger("one:queryReturned");
}, 3000);
}else{
var complete = $(".complete");
complete.removeAttr("class");
var editor = ace.edit("editor");
editor.setReadOnly(false);
editor.setTheme("ace/theme/twilight");
$("#main").DataTable({
paging: false
});
}
});
</script>
Не стесняйтесь удалить тайм-аут, если хотите испытать это на себе.