提问人:nathaniel 提问时间:10/18/2008 最后编辑:nathaniel 更新时间:6/10/2009 访问量:2130
ASP.NET 2.0 回调在 Firefox 中无法正常工作
ASP.NET 2.0 callbacks not working correctly in Firefox
问:
我实现了一个 .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”始终是相同的数据,因此作为下拉列表显示的innerHTML始终显示相同的项目。我已经仔细检查了我的客户端代码,并且正在发送正确的信息客户端>服务器,并返回服务器>客户端。<div>
值得注意的是,在 .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。如何设置事件以捕获击键,您是否不小心添加了事件?如何调用脚本服务?只需仔细检查所有基础知识,以确保它不是那样疯狂和简单的事情。
值得一提的是,MS AJAX Function.createCallback() 似乎在 FireFox 中无法正常工作。在这里看到这篇文章,带有复制代码:
Function.createCallback 在 FireFox 中无法正确传递上下文
上下文变量在传递给回调函数时似乎会丢失其状态。
下一个:GWT 中的客户端回调
评论