2008-10-17 2 views
2

Я реализовал элемент управления .NET Web, который использует структуру обратного вызова, реализованную в ASP.Net 2.0. Это автоматический контроль, и он работает правильно в 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 «арг» всегда одни и те же данные, так что innerHTML из <div>, который является дисплей для моего раскрывающегося списка всегда показывает одни и те же элементы. Я дважды проверял код своей клиентской стороны, и правильная информация отправляется клиентом -> сервером и в обратном сервере -> клиентом.

Следует отметить, что в функции «WebForm_DoCallback», созданного в рамках .NET, следующий фрагмент кода вызывался:

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

Я думаю, вам нужно предоставить дополнительную информацию, вероятно, маловероятно, что эта проблема возникает из-за встроенных js asp.net. Как настроить событие, чтобы поймать нажатия клавиш, случайно добавляете ли вы события? Как называется вызов scriptservice? Просто дважды проверьте все основы, чтобы убедиться, что это не что-то сумасшедшее и простое.

1

Для чего стоит MS AJAX Function.createCallback(), похоже, не работает правильно в FireFox. Смотрите этот пост здесь, с REPRO кодом:

Function.createCallback doesn't pass context correctly in FireFox

Оказывается, что переменная контекста теряет свое состояние, когда она передается в функцию обратного вызова.