2

ASP.Net 2.0 で実装されたコールバック構造を使用する .NET Web コントロールを実装しました。これは自動ドロップダウン コントロールであり、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" 関数では、次のスニペットが呼び出されます。

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が2回呼び出されることはありません-実際、ドロップダウンは最初のキーストロークで正しく機能します。最初のキーストロークの後、動作を停止し、古い戻りデータでコールバックを 2 倍にします。

4

3 に答える 3

1

価値があるのは、MS AJAX Function.createCallback() が FireFox で正しく機能していないようです。再現コードを含むこの投稿を参照してください。

Function.createCallback が FireFox でコンテキストを正しく渡さない

コンテキスト変数がコールバック関数に渡されると、その状態が失われるようです。

于 2009-06-09T18:46:07.273 に答える
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 を form タグ内に貼り付けてみて、違いが生じるかどうかを確認できます。

于 2008-10-20T21:54:27.670 に答える
0

もっと情報を提供する必要があると思います。おそらく、この問題がasp.netの組み込みjsが原因である可能性は低いです。キーストロークをキャッチするためにイベントをどのように設定していますか? 誤ってイベントを追加していませんか? scriptservice はどのように呼び出されていますか? すべての基本を再確認して、そのようなクレイジーで単純なものではないことを確認してください.

于 2008-10-21T03:46:12.623 に答える