ASP.NET 2.0回调在Firefox中无法正常工作

时间:2008-10-17 18:29:14

标签: .net ajax firefox callback

我实现了一个.NET Web控件,它使用ASP.Net 2.0中实现的回调结构。这是一个autodropdown控件,它可以在IE 6.0 / 7.0和谷歌浏览器中正常工作。这是相关的回调函数:

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始终显示相同的项目。我已经仔细检查了我的客户端代码,正确的信息正在发送客户端&gt;服务器和返回服务器 - &gt;客户端。

值得注意的是,在.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);xmlRequest.send(postData);上同时调用回调函数ReceiveServerData。我想知道这是否会导致错误,但我的调试技巧已经结束了。

编辑添加 - 在我第一次使用下拉列表时,没有两次调用ReceiveServerData - 事实上,下拉列表在第一次击键时正常工作。它会停止工作,并在第一次击键后用旧的返回数据加倍回调。

3 个答案:

答案 0 :(得分:1)

对于它的价值,MS AJAX Function.createCallback()似乎在FireFox中无法正常工作。在这里看到这篇文章,带有repro代码:

Function.createCallback doesn't pass context correctly in FireFox

当上传变量传递给回调函数时,它似乎失去了它的状态。

答案 1 :(得分:0)

我不确定这是否会有所帮助,但我修补了这样的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,看看它是否会产生影响。

答案 2 :(得分:0)

我认为你需要提供更多信息,这个问题可能不太可能是因为asp.net的内置js。如何设置事件以捕获击键,您是否意外添加事件?如何调用scriptservice?只需仔细检查所有基础知识,确保它不像那样疯狂和简单。

相关问题