2008-10-17 101 views
2

我已經實現了一個使用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未被調用兩次 - 事實上,下拉菜單對於第一次按鍵操作正確。它停止工作,並在第一次擊鍵後用舊的返回數據使回調加倍。

回答

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,以查看它是否會產生影響。

0

我想你需要提供更多的信息,這可能不是由於asp.net的內置js。如何設置事件來捕捉按鍵,您是否意外添加事件?如何調用scriptservice?只需仔細檢查所有的基本知識,以確保它不是那樣瘋狂和簡單。

相關問題