这很奇怪,我正在试图找出原因。我的AJAX电话是
$('.edit-config').click(function() {
var that = this;
var msg;
ipt = $(this).closest('tr').find('input');
$.ajax({ url: ajaxurl,
method: 'POST',
data: { 'action' : 'config_update', 'name' : ipt.attr('name'), 'val' : ipt.attr('value') },
beforeSend: function ( ) { $(that).addClass('updating').text("Updating ... "); },
complete: function ( ) { $(that).removeClass('updating').text("Update"); },
success: function ( submitted ) {
if ( submitted === 'true' ) { msg = "Successfully updated configuration in database"; }
else { msg = "Error when trying to update database"; }
},
error: function ( ) { msg = "Unspecified internal error"; }
});
alert(msg);
});
我想更改它,以便alert(msg);
在$.ajax(...)
完成运行之后才会被调用,因为这是首先设置msg
的地方。所以我添加了async: false
作为参数,然后我注意到addClass('updating')
正在添加类,但是与该类关联的样式没有显示,而之前它已经显示(当async
时默认情况下为true
。
答案 0 :(得分:2)
因为当你告诉它同步运行时,它会让你唯一的线程工作。这意味着它忙于等待网络呼叫而不是响应。当网络呼叫同步运行时,您无法执行任何。不要这样做。
不要使用async: false
。
如果不清楚,async: false
BAD 。事实上,有些浏览器甚至不允许你再这样做了。
如果您需要alert()
在通话后运行,只需将其置于成功/错误回调中。