這似乎驅使我batty。jQuery在Ajax完成加載後執行加載消息!
我嘗試在進行ajax調用之前顯示ajax loader gif。 Firefox是唯一按順序執行此操作的瀏覽器。所有其他瀏覽器先完成ajax調用,然後顯示加載器。
此代碼:
$(#element).click(function(evt){
tmp_eleX = $this.offset().left; // get current left position of element
tmp_eleY = $this.offset().top; // get current top position of element
$('#ajax_loader').css({top: tmp_eleY-208}); // show ajax loader which was placed outside viewable area (-9999)
$.ajax({
url: "some_file.cfm",
cache: false,
dataType: "html",
async: false, // wait for loading to finish before continuing code
timeout: 30000,
error: function(){
return true;
},
success: function(data) {
$('#someelementtoinject_ajaxdata').html(data);
}
});
$('#ajax_loader').css({top: -9999}); // move ajax loader off screen - for testing i comment out this line to see when the loader shows!
});
這是巴蒂推動我。我試着包裝Ajax調用在
window.setTimeout(function(){
}, 0);
阿賈克斯裝載機展現在所有瀏覽器中的Ajax調用,問題的GIF動畫不是動畫,直到阿賈克斯完成加載的東西之前!
我也試過:
$('#ajax_loader')
.ajaxStart(function() {
$(this).css({
top: -208
})
})
.ajaxStop(function(){
$(this).css({
top: -1000
})
});
同樣的結果阿賈克斯.ajaxStart觸發之前完成了,心裏很不舒服:/!在這裏,只有Firefox能夠正常工作並在ajax調用之前顯示動畫。
似乎在所有瀏覽器中工作的唯一方法是設置ajax調用'async:true'。在繼續之前加載ajax是非常重要的,並且可能觸發頁面上的另一個Ajax調用。
關於如何在ajax完成之前觸發加載器的任何想法?在代碼繼續之前,還需要完成ajax。
我沒想到這個@^& ^#@我的大腦出血:/
爲什麼在調用ajax調用中的「成功」或「完成」之前將裝載程序移出屏幕? – justkt 2011-03-29 15:23:40
我認爲這是沒有dom操縱的最快方法。加載程序元素已經存在。我這樣做很自然。取決於哪個元素被點擊過,加載器在屏幕上有不同的位置,觸發位置改變似乎是最好的解決方案。但考慮到我的結果和問題,我完全接受其他建議。 – PixelGrinch 2011-03-29 15:27:09
你不應該移動你的裝載機,直到你完成了ajax,否則它會在屏幕上和屏幕之外快速閃爍。 – justkt 2011-03-29 15:53:15