花了一些时间试图实现这一点,并有一个我认为在 Firefox 中运行良好的解决方案,但是在 IE 中进行测试时发现使用 async: false 会导致浏览器被锁定(停止响应并似乎已冻结)通话时长。
要求基本如下。我提供了一系列用户可以检查的复选框。在特定时间,我调用我的函数“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;
}