ASP.NET 2.0回调在Firefox中无法正常工作
我已经实现了一个使用ASP.Net 2.0中实现的回调结构的.NET Web控件。这是一个自动降低控件,它在IE 6.0/7.0和Google Chrome中正常工作。下面是相关的回调函数:ASP.NET 2.0回调在Firefox中无法正常工作
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。我已经重新检查了我的客户端代码,正确的信息被发送到客户端 - >服务器,并返回server-> client。
值得注意的是,由.NET Framework创建的“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;
}
和回调函数ReceiveServerData被称为上都xmlRequest.open("POST", theForm.action, true);
和xmlRequest.send(postData);
。我想知道这是否会导致错误,但是我处于调试技能的末尾。
编辑添加 - 在第一次使用下拉菜单时,ReceiveServerData未被调用两次 - 事实上,下拉菜单对于第一次按键操作正确。它停止工作,并在第一次击键后用旧的返回数据使回调加倍。
我不知道这是否会帮助,但我已经修补了ASP.NET 2.0回调像这(精缩代码):
function WebForm_CallbackComplete()
{
for(var i=0; i< __pendingCallbacks.length;i++)
{
var _f3=__pendingCallbacks[i];
if(_f3 && _f3.xmlRequest && (_f3.xmlRequest.readyState==4))
{
__pendingCallbacks[i]=null;
WebForm_ExecuteCallback(_f3);
if(!_f3.async)
{
__synchronousCallBackIndex=-1;
}
var _f4="__CALLBACKFRAME"+i;
var _f5=document.getElementById(_f4);
if(_f5)
{
_f5.parentNode.removeChild(_f5);
}
}
}
}
如果您检查实际执行WebForm_CallbackComplete,你会发现的几个问题。您可以尝试在窗体标记中粘贴该JavaScript,以查看它是否会产生影响。
我想你需要提供更多的信息,这可能不是由于asp.net的内置js。如何设置事件来捕捉按键,您是否意外添加事件?如何调用scriptservice?只需仔细检查所有的基本知识,以确保它不是那样疯狂和简单。
对于它的价值,MS AJAX Function.createCallback()在FireFox中似乎不能正常工作。在这里看到这个帖子,与摄制代码:
Function.createCallback doesn't pass context correctly in FireFox
看来,当它传递给回调函数的上下文变量会丢失其状态。