我的网站是用经典的asp制作的。在一个页面上有5个文本框和5个标签。当用户在文本框中键入一些值然后使用javascript(在Onchange事件上添加)时,会调用另一个asp页面进行一些计算,根据键入的值获取一些数据库值并将结果返回给调用者页面以显示在相应的标签中。为所有文本框调用相同的页面以获取结果。我的问题是,如果用户以正常速度键入并以正常速度移动到其他文本框(使用选项卡),则第二页被正确调用并且结果在标签中正确显示,但如果用户键入的速度非常快,那么请求值为1文本框未完成,其他文件发送,因此第一个没有结果值。有没有办法解决这个问题。
由于
答案 0 :(得分:0)
如果你不想重构整个事情来使用XHRequests,那么就有一个简单的解决方案。在onchange事件中检查“正在进行中的请求”标志。如果请求正在进行中,请对当前操作进行排队。在结果显示代码中,检查队列并执行下一个操作(如果有)。如果没有剩余动作,请重置标志。
以下是代码中的基本概要:
var requestInProgress = false;
var pendingActions = [];
function OnChangeHandler(onChangeFunction) {
if(requestInProgress) {
pendingActions.push(onChangeFunction);
}
else {
requestInProgress = true;
onChangeFunction();
}
}
function ResponseHandler()
{
//Your regular response handling code
if(pendingActions.length > 0) {
var nextFunction = pendingActions.shift();
nextFunction();
}
else {
requestInProgress = false;
}
}
我不是JS专家,所以我确信这可以稍微清理一下,但它应该处理重叠事件就好了。