jQuery的加载图像,而异步假

问题描述:

我想给用户知道,而我所做的与jQuery的AJAX调用有事情发生纺纱GIF图像。我必须使用async:false,否则代码会变得混乱,最终会导致一个不好的会话变量。这里是我有什么(即不显示GIF,直到电话后冻结了屏幕。)jQuery的加载图像,而异步假

$('#status' + itemNum).html("<img width='14px' src='/style/images/spinner.gif'>"); 
if (foo == "bar") { 
$.ajax({ 
    type:"POST", 
    url: "foobar.html", 
    async:false, 
    data: "val1=" + escape(newValue) + "&val2=" + fieldName + "&val3=" + newValue2 
    }) 
} else { 
$.ajax({ 
    type:"POST", 
    url: "foobar.html", 
    data: "val1=" + escape(newValue) + "&val2=" + fieldName + "&val3=" + newValue3 
    }) 
    document.getElementById('status' + itemNum).innerHTML = "SAVED"; 
} 
$("#status" + itemNum).show(); 
setTimeout("fade_out('"+itemNum+"')", 1000); 
} 

在这种情况下,我只希望异步时富=酒吧。任何人都可以让我知道为什么spinner.gif在调用之后加载。我在想这可能是因为微调不在其他地方,并且在加载时会有延迟,但是当它被多次调用时应该不会显示出来(应该在缓存中),所以我很难过。

谢谢!

+0

欢迎SJAX的邪恶,痛苦的世界。 – SLaks

+0

另外,请勿将字符串传递给'setTimeout'。 – SLaks

+0

将字符串传递给setImeout有什么问题? – oneadvent

这是不可能的。
由于JavaScript中的UI线程中运行,async: false将冻结browserm包括所有的动画。


使用async: false

你需要修正你的代码来处理异步请求。

+0

:)我还没找到无论如何阻止某人不断点击按钮,任何建议?我想甚至在通话过程中禁用它。 – oneadvent

+2

是;禁用按钮。 – SLaks

+0

我添加了这个答案,因为这是我做的,禁用按钮,并使用onsuccess重新启用它 – oneadvent

async: false将锁定浏览器,导致所有动画暂停,直到处理被允许继续。但是,通过在延迟1ms或更长的时间内将ajax调用放置在setTimeout内,您至少可以在ajax调用之前使图形显示出来。尽管它是一个动画GIF,但它仍然不会动画。


当然,上面只是一个创可贴,较好的解决办法是不使用async: false

+0

有没有任何选项来显示动画的gif,而这样做ajax调用,并使其后消失 – oneadvent

+0

是的,如果您使用'async:true'而不是'async:false'。 –