2010-03-19 95 views
0

当我使用AJAX时,我通常会在每次请求之前做一些事情,让用户知道他们会等待一秒钟。这通常通过添加动画加载gif来完成。当我这样做的时候,Firefox做了你所期望的并且在把控制移到下一行(AJAX被调用的位置)之前添加了gif。在Chrome中,它锁定了浏览器,并且根本不做任何DOM更改(更不用说加载图像),甚至包括更改某种东西的颜色,直到AJAX完成。虽然这不仅仅是AJAX。它是任何可以控制的东西,它不会改变DOM,直到控件返回窗口。谷歌浏览器,AJAX之前调整风格的IE问题

例(使用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,因为这是我唯一遇到这个问题的时候)。

这和它在一个函数里没有任何关系。

回答

1

查看jQuery的ajaxStart,ajaxSend,ajaxStopajaxError方法,这些方法可让您将事件附加到Ajax进程的各个部分。

+0

@Tom这次没有帮助我,因为我没有完全诚实。我正在使用jQuery,但是我正在使用AJAX的外部API。然而,在实施过程中它是相似的,这就是为什么我以这样的方式问了问题。但是,我选择了你的答案,因为这是我不知道的很好的信息。从现在开始,当我纯粹用jQuery工作时,我肯定会使用这些工具(而不是手动执行前后的工作。 – orokusaki 2010-03-20 05:42:08