Когда jQuery ajax-вызов запущен, loadmask не запускается
Когда jQuery AJAX называется async:false
Маска не стреляет. Даже если я позвоню до Ajax:
$("#d").on("click", function () {
$("#d").mask("Waiting...");
fn();
$("#d").unmask("Waiting...");
});
Полный код ниже:
<link href="jquery.loadmask.css" rel="stylesheet" type="text/css" />
<script src="jquery-latest.pack.js" type="text/javascript"></script>
<script src="jquery.loadmask.js" type="text/javascript"></script>
<div id="d" style="border: 1px solid red; width: 300px; height: 200px">asdfasdf</div>
<script>
$(function () {
$("#d").on("click", function () {
fn();
});
});
function fn() {
var a = JSON.stringify({
text: 'some text',
array: [1, 2, 'three'],
object: {
par1: 'another text',
par2: [3, 2, 'one'],
par3: {}
}
});
var data = {
json: a,
delay: 3
}
$.ajax({
url: "http://jsfiddle.net/echo/json/",
data: data,
type: "POST",
async: false,
beforeSend: function (response) {
$("#d").mask("Waiting...");
},
success: function (response) {
console.log(response);
},
complete: function () {
$("#d").unmask("Waiting...");
}
});
}
</script>
2 ответа
Решение
Это потому, что поток браузера заблокирован ожиданием ajax. решение состоит в том, чтобы использовать setTimeout().
Пытаться
$("#d").on("click", function () {
$("#d").mask("Waiting...");
setTimeout(function(){
fn()
$("#d").unmask("Waiting...");
}, 1);
});
Как называется ваш Асинхронный скрипт не загружен jQuery $(document).ready и UpdatePanels?
Я думаю, что это будет работать
function BindEvents(){
$("#d").on("click", function () {
$("#d").mask("Waiting...");
fn();
$("#d").unmask("Waiting...");
});
}
$(document).ready(function () {
BindEvents();
});
<script type="text/javascript">
// Create the event handler for PageRequestManager.endRequest
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(BindEvents);
</script>