花了一點時間去實現這一點,有一個解決方案,我認爲作品相當不錯,在Firefox,但在IE瀏覽器中進行測試時發現,使用異步:假導致瀏覽器被鎖定(停止響應和apprears有冰凍)在通話期間。
要求基本上如下。我提供了一系列用戶可以檢查的複選框。在特定的時間,我調用我的函數'selectedSeriesData()',這個函數使用發送請求到我的服務一個接一個地獲取請求的數據。我特別選擇使用同步,以便在方法執行時向瀏覽器輸出狀態消息和警告。
例如。 「加載數據1/3」,然後選擇「加載數據的2/3」,「加載數據3/3」
當然,我現在才知道,這一定鎖定瀏覽器,以便在IE中的經驗,不僅鎖定瀏覽器,但我試圖顯示的任何消息都沒有顯示。是否有任何簡單的doEvents類似於在每次調用ajax之後可以調用的動作,還是僅僅是重構我的ajax調用的問題。如果是這種情況,根據我的要求提供任何實施建議?
下面是代碼以供參考的簡化的提取物。
function selectedSeriesData() {
var seriesData = [];
var index = 0;
$.each($("input[name='idCheckBox']:checked"), function() {
var id = $(this).val();
$("#loadingMessage").text("Loading " + id + "...");
$.ajax({
type: 'POST',
async: false,
url: '<%: loadSeriesDataPath %>',
dataType: 'json',
data: {
Id: id
},
success: function (data) {
seriesData[index] = data;
index++;
},
error: function (xhr, ajaxOptions, error) {
$("#warnings ul").append('<li>A communication error occured while attempting to load data for the series.</li>');
}
});
}
});
return seriesData;
}
你是什麼意思的「鎖」? – OptimusCrime 2012-04-20 08:59:56
OptimusCrime,當我說鎖,我的意思是瀏覽器實際上停止響應,並且只有在循環完成執行後纔開始響應。因此,對於使用IE的最終用戶來說,它看起來像瀏覽器崩潰了。 – Arkiliknam 2012-04-20 09:02:12
你能提供jsFiddle的例子嗎? – tarmaq 2012-04-20 09:04:19