当我使用AJAX时,我通常会在每次请求之前做一些事情让用户知道他们会等待一秒钟。这通常只需添加动画加载gif即可完成。当我这样做时,Firefox会按照您的期望进行操作,并在将控件移动到下一行(调用AJAX的位置)之前添加gif。在Chrome中,它会锁定浏览器并且根本不会进行任何DOM更改(更不用说加载图像),甚至包括更改某些内容的颜色,直到完成AJAX。这不仅仅是AJAX。它是控制权的任何东西,在控件返回窗口之前它永远不会进行DOM更改。
示例(使用jQuery):
function submit_order()
{
$('#my_element').css('color', '#FF0000'); // Make text red before calling AJAX
$.getJSON('/api/', my_callback)
// Note, in IE and Chrome #my_element isn't turned red until the AJAX finishes and my_callback is run
}
为什么会发生这种情况,我该如何解决?我不能使用ASYNC因为数据的性质(这将是一个很大的混乱)。我在设置样式后尝试使用window.setTimeout(myajaxfunc, 150)
,看它是否会设置样式,然后执行超时,但看起来它不仅仅是AJAX的问题,而是一般的脚本控制(我想,因此这个标题提到了AJAX,因为这是我遇到这个问题的唯一一次)。
这与它在BTW功能中没有任何关系。