Обратные вызовы ASP.NET 2.0 не работают правильно в Firefox - PullRequest
2 голосов
/ 17 октября 2008

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

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

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 не вызывается дважды в первый раз, когда я использую раскрывающийся список - фактически, раскрывающийся список работает правильно для самого первого нажатия клавиши. Он перестает работать и удваивает обратный вызов со старыми возвращаемыми данными после первого нажатия клавиши.

Ответы [ 3 ]

1 голос
/ 09 июня 2009

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

Function.createCallback неправильно передает контекст в FireFox

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

0 голосов
/ 21 октября 2008

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

0 голосов
/ 21 октября 2008

Я не уверен, поможет ли это, но я пропатчил обратные вызовы 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 в тэг формы, чтобы увидеть, изменится ли он.

...