我已经实现了一个 .NET Web 控件,它使用在 ASP.Net 2.0 中实现的回调结构。它是一个自动下拉控件,在 IE 6.0/7.0 和 Google Chrome 中可以正常工作。这是相关的回调函数:
function ReceiveServerData(args, context)
{
document.getElementById(context).style.zIndex = 300;
document.getElementById(context).style.visibility = 'visible';
document.getElementById(context).innerHTML = args;
fixHover(context);
}
在 Firefox 中,“args”始终是相同的数据,因此<div>
作为我的下拉菜单显示的 innerHTML 始终显示相同的项目。我已经仔细检查了我的客户端代码,并且正确的信息被发送到客户端->服务器并返回服务器->客户端。
值得注意的是,在 .NET 框架创建的“WebForm_DoCallback”函数中,调用了以下代码片段:
if (setRequestHeaderMethodExists) {
xmlRequest.onreadystatechange = WebForm_CallbackComplete;
callback.xmlRequest = xmlRequest;
xmlRequest.open("POST", theForm.action, true);
xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlRequest.send(postData);
return;
}
xmlRequest.open("POST", theForm.action, true);
并且回调函数 ReceiveServerData 在和上都被调用xmlRequest.send(postData);
。我想知道这是否会导致错误,但我的调试技能已经结束。
编辑添加——第一次使用下拉菜单时,ReceiveServerData 没有被调用两次——事实上,下拉菜单在第一次击键时就可以正常工作。在第一次击键后,它停止工作,并使用旧的返回数据使回调加倍。