0

jQuery AJAX投稿から呼び出された.ashxハンドラーが、HttpContext.Requestのフォーム要素を受け取らないことがあります。

これが発生すると、リクエストにはViewState要素のみが含まれるか、要素がまったく含まれません。

IE7、IE8、およびIE9でのみ失敗することがあります(さまざまなブラウザーで1日あたり数千ヒット)。IEを使用してこれを自分で再現することはできず、「ほとんどの」IEユーザー(および他のすべてのユーザー)はこの問題を経験しません。

Javascript:

var data = $('form').serializeArray();
$.ajax({
            type: "POST",
            async: false,
            dataType: "text",
            url: "handler.ashx",
            data: data
        });

C#(handler.ashx):

void IHttpHandler.ProcessRequest(HttpContext context) {
     var collection = SetCollection(context.Request);

     // collection sometimes has just ViewState elements;
     // sometimes it has no items
     }

private NameValueCollection SetCollection(HttpRequest request){
    return request.Form;
}

その他の情報:このサイトは、ロードバランサーを備えたWebファームの一部です。.net3.5の使用。IEにはリクエストヘッダーを生成する別の方法があることを読みました。これが関連しているかどうかわからない。

私の問題を解決するための洞察をありがとう。

4

1 に答える 1

0

修正済み:この問題はFirefoxにも存在し、Firebugを使用できるため、問題の解決に役立ちました。

このハンドラーは、サーバーに情報を送信し、エラーが発生した場合(つまり、JavaScriptが応答を必要としない場合)にサーバー例外をスローするように構築されています。FirefoxとIEは、JavaScriptへの応答を期待しています。Firefoxは正常に失敗します(サーバーエラーをスローしますが、まだ機能しています)。IEは、ブラウザをクラッシュさせることでひどく失敗します。

ハンドラーの最後にcontext.Response.write( "true")を追加しましたが、エラーがスローされたり、停止したりすることはなくなりました。

これが将来の誰かに役立つことを願っています。

于 2012-10-02T16:59:43.620 に答える