$(document).ready(function(){
$("#submit").click(function() {
var startDate = $("#startdate").val();
var endDate = $("#enddate").val();
var selected = $("#selected").val();
$.ajax({
type: "POST",
url: "/json/chart",
data: {
selected:selected,
startDate:startDate,
endDate:endDate
},
success: function(data) {
$("#pkgLineDiv").empty().html("");
$.each(data, function(index) {
$('#pkgLineDiv').prepend('<img id="'+ index+'" src="/public/images/ajax-loader.gif" /><br />');
$('#'+index).attr('src', 'chart/'+ data[index].pkgLineId +'/'+ data[index].wrapSpecId +'/'+ data[index].startDate +'/'+ data[index].endDate);
});
}
});
return false;
});
});
這是我的代碼。我正在做一個ajax提交併獲取一些json數據。然後我將這些數據傳遞給圖表網址。此圖表網址是一個在後端生成圖片的功能。問題是這可能是一個漫長的過程。一個簡單的ajax加載圖像不起作用,因爲ajax調用很快(獲得一個快速的json數組)。在ajax調用之後會發生什麼,需要一段時間。我想要做的是獲得一張圖像來顯示圖像的位置。我不能擁有佔位符,因爲我不知道要創建多少圖像。jQuery追加gif,而ajax調用不適用於Chrome,Firefox。在IE中工作(儘管沒有動畫)
此代碼將在IE 8中工作。動畫不會播放,但至少圖像顯示最終圖像的位置。在Chrome和Firefox(我的主要測試環境)中,圖像根本不會顯示。有什麼我在這裏失蹤?謝謝。
編輯
: $("#pkgLineDiv").empty().html(""); //Empty all contents of the div to push new chart images
$.blockUI();
$.each(data, function(index) {
var chartUrl = 'chart/'+ data[index].pkgLineId +'/'+ data[index].wrapSpecId +'/'+ data[index].startDate +'/'+ data[index].endDate; //Build chart URL
$('#pkgLineDiv').prepend(''+ data[index].description +'<div><img id="'+ index +'" src="/public/images/ajax-loader4.gif" /></div');
$.get(chartUrl, function() {
$('#'+index).attr('src', chartUrl);
if (index == data.length - 1) {
$.unblockUI();
}
});
});
對圖表的URL進行ajax請求,成功時將圖像的src設置爲圖表的URL。瀏覽器應該已經將圖像緩存到本地,您可以通過將正確的HTTP標頭添加到生成圖表的頁面來確保它。例如,如果對「chart?a = 10&b = 5」的調用總是生成相同的圖表,則應該已經確保圖像在客戶端上緩存了一段時間,因此請充分利用該圖表。 – mikey 2011-05-30 13:20:10
非常感謝。這完美地解決了圖像問題。我一直在嘗試在圖表加載時阻止頁面上的交互。你對此沒有任何想法。如果我在$ .get的開始和結尾放置阻塞,它不起作用。它會阻止並立即取消阻止。我猜想沒什麼大不了的。就是想。謝謝。 – 2011-05-30 15:46:57
Drew,嗯 - 在$ .each ...行之前開始阻塞。然後你需要記住ajax調用是異步的,所以它們被髮送到服務器,然後當響應從服務器返回時,「函數(數據)」部分在「回調」中執行。只有在所有$ .get *調用都有「回叫」後,纔想停止阻止。所以在回調中,請在那裏進行檢查,如果他們全部完成加載並回叫,然後解除封鎖。有很多方法可以實現它我會把它留給你。 – mikey 2011-05-30 23:37:32