如何在 ajax 调用之前和之后更改 css 属性(如光标:等待或背景)

How to change css property (like cursor:wait, or background) before AND after ajax calls?

本文关键字:光标 属性 等待 背景 css ajax 调用 之后      更新时间:2023-09-26

我在这段代码中遇到了问题,我试图在函数工作时显示红色背景,然后(只有这样)我将背景更改为绿色。

当以下警报未被评论时,我可以看到一段时间的红色背景,然后是绿色(这就是我想要的)。

但是当我评论该警报时,似乎从未设置过红色背景,一旦 processData 完成,背景就会正确设置为绿色。

有人能为我解开这个谜团吗?谢谢!

function beforeProcess(params){
    $('#result').css('background','red');
    alert('now i start waiting, while background is red');
    $.when(processData(params)).done(
        $('#result').css('background','green')
    );
}

function process(params){
     //This function takes some time, and it makes (indirectly) some synchronous ajax calls (async:false)
}

只有在函数完成执行后,视图才会更新。这可以使用 setTimeout 来完成http://jsfiddle.net/YEVHv/4/

$('#result').css('background', 'red');
//alert('now i start waiting, while background is red');
setTimeout(function () {
    $.when(process("")).done(
    $('#result').css('background', 'green'));
}, 0);

function process(params) {
    for (var i = 0; i < 10000; i++) {
        console.log("hello");
    }
}

希望有帮助

我的猜测是你的函数"进程"返回得很快......请记住,JS中的每个函数调用都是异步执行的。如果要在处理时显示进度或显示某些状态(红色),则必须确保函数进程在所有子函数完成后返回。现在,我只能考虑使用标准回调。

$.when 在与延迟对象一起使用时很有用。如果您使用的函数不是延迟对象,则立即执行"done"。请看下面从"http://api.jquery.com/jQuery.when/"摘录:"如果将单个参数传递给jQuery.when,并且它不是延迟或承诺,它将被视为已解决的延迟,并且任何附加的doneCallbacks将立即执行。

希望这有帮助