为什么make async:false会导致CSS无法渲染?

时间:2015-12-14 22:31:03

标签: javascript jquery css ajax asynchronous

这很奇怪,我正在试图找出原因。我的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

1 个答案:

答案 0 :(得分:2)

因为当你告诉它同步运行时,它会让你唯一的线程工作。这意味着它忙于等待网络呼叫而不是响应。当网络呼叫同步运行时,您无法执行任何。不要这样做。

不要使用async: false

如果不清楚,async: false BAD 。事实上,有些浏览器甚至不允许你再这样做了。

如果您需要alert()在通话后运行,只需将其置于成功/错误回调中。