【问题标题】:ASP.NET 2.0 callbacks not working correctly in FirefoxASP.NET 2.0 回调在 Firefox 中无法正常工作
【发布时间】:2008-10-17 18:29:13
【问题描述】:

我已经实现了一个 .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”函数中,调用了以下 sn-p:

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 没有被调用两次——事实上,下拉菜单在第一次击键时就可以正常工作。它停止工作,并在第一次击键后使用旧的返回数据使回调加倍。

【问题讨论】:

    标签: .net ajax firefox callback


    【解决方案1】:

    不管怎样,MS AJAX Function.createCallback() 似乎在 FireFox 中无法正常工作。在这里查看这篇文章,带有复制代码:

    Function.createCallback doesn't pass context correctly in FireFox

    似乎上下文变量在传递给回调函数时会丢失其状态。

    【讨论】:

      【解决方案2】:

      我不确定这是否会有所帮助,但我已经像这样(缩小代码)修补了 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 粘贴到您的表单标签中,看看它是否会有所作为。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2019-08-07
          • 2013-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-29
          • 2013-07-18
          • 1970-01-01
          相关资源
          最近更新 更多