Я хочу исправить код на JQuery, который открывает всплывающий официант, выполняет загрузку ajax, а затем закрывает всплывающие окна. Первая версия была такова:как выполнить функцию один за другим
$("#SearchInfo").click(function() {
alert("1.Start function. Open waiter popup");
OpenWaiterDialog();
alert("2.Start execution ajax request");
$.ajax({
type: "GET",
url: "/searchParameterInBuildDefinition/SearchInfoByBuilds?nameTeamProject=" + $("#SelectorProjectForSearch").val() + "&searchmessage=" + $("#searchmessage").val(),
data: "",
async: false,
success: function (response) {
var output = "";
$.each(response, function (i, item) {
//console.log("======================");
//console.log("Id:" + response[i]);
output += "<tr><td>" + response[i] + "</td></tr>";
});
$("#TableTestCases").show();
$('#BodyTable').html(output);
},
dataType: "json"//set to JSON
})
alert("3.Request finish. Close popup");
CloseWaiterDialog();
});
Когда я выполнить эту функцию, браузер заморожена (Microsoft Грань), а также после получения данных АЯКСА, покажите мне сообщение 3,1,2.
Я попытался короткую функцию:
$.when($.when(OpenWaiterDialog()).then(SearchInfoInBuildDefinition())).then(CloseWaiterDialog());
Но даже в этом случае веб-страницы заморозили для запроса Ajax, краски официанта всплывающих окон, и не может закрыть всплывающее окно. Как это исправить. Возможно ли получить более высокий приоритет для пользовательского интерфейса?
Почему бы не поместить ваш CloseWaiterDialog в функцию успеха вашего вызова ajax и сделать асинхронным? – user1628733
1) удалить свойство 'async: false'. Это действительно плохая практика. Если вы проверите консоль, браузер даже скажет вам не использовать ее. 2) Поместите 'alert ('3 ...')' и 'CloseWaiterDialog()' call * внутри * обратный вызов 'success'. –