4

よし、Prototype ライブラリを使用してページ ビハインドで Web メソッドへの AJAX 呼び出しを行い、データを取得する .NET アプリケーションがあります。このアプリケーションは、かなり長い間稼働しており、問題はありません。最近、新しいユーザーがアプリケーションを使い始め、いくつかの奇妙な問題が発生しました。

基本的に、しばらくの間はアプリケーションを問題なく使用できますが、AJAX 呼び出しで Web メソッドにパラメーターが欠落していることを示すエラーがスローされ始めます。エラーは次のとおりです。

System.InvalidOperationException - Unable to perform the requested action:  Invalid web service call, missing value for parameter: 'fleet'.
   at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary'2 parameters)
   at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary'2 parameters)
   AT SYSTEM.WEB.SCRIPT.SERVICES.RESTHANDLER.INVOKEMETHOD(HTTPCONTEXT CONTEXT, WEBSERVICEMETHODDATA METHODDATA, IDICTIONARY`2 RAWPARAMS)
   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)

めちゃくちゃになるのは 1 つの呼び出しだけではなく、任意の ajax 呼び出しであり、常に「行方不明」と呼ばれる webmethod の最初のパラメーターであるように見えます。投稿データが何らかの形で戻ってこないのではないかと思いますか? (関連?: JQuery Ajax post パラメータが IE で送信されないことがあります)。

この問題を再現することはできませんでしたし、他のユーザーも経験していません。これにより、問題を引き起こしているのはこのユーザー システムに固有のものであると思われます。残念ながら、彼らはかなり重要なユーザーなので、この問題を解決する必要があります。ユーザーはブラウザとして IE8 を使用しています。プロトタイプを使用して ajax 呼び出しを行うコードは次のとおりです。

function gAjax(url, params, onSuccess, onError, onException, onComplete) {

    new Ajax.Request(url,
    {
         method:'post',                                     //Post
         contentType:"application/json; charset=utf-8",     //As JSON
         postBody:Object.toJSON(params),                    //Post Body is JSON string
         sanitizeJSON:true,                                 //Sanitize the JSON
         onComplete:onComplete,                             //Set user on complete
         onSuccess:onSuccess,                               //Set user on success
         onFailure:onError,                                 //Set user on error
         onException:onException                            //Set user on exception
    });
}

onComplete、onSuccess、onError、onException は関数コールバックです。params は次のようなオブジェクトです。

{'フリート':'フリートヴァル','ビン':1234}

Url は、Bin.aspx/LoadBinInfo などのメソッドです。このメソッドは、バックエンドで次のように定義されています。

    <System.Web.Services.WebMethod()> _
    Public Shared Function LoadBinInfo(ByVal fleet As String, ByVal bin As Integer) As Dictionary(Of String, Object)

        '.....
        'Returns a dictionary of info
    End Function

何が起こっているのかについて誰かが何か考えを持っているなら、私はどんな意見でも大歓迎です! 私の調査では、考えられる原因につながる情報が見つからないようです。繰り返しますが、これはこの 1 人のユーザーにのみ発生するように思われるため、おそらく彼の側のブラウザー設定です (どのような設定が考えられますか?)。しかし、それでも彼にとっても散発的ですが、一度発生し始めると、彼がブラウザを閉じて最初からやり直すまで、それは絶えず発生します.

4

1 に答える 1

0

回答ではなくコメントするほどの評判がないようなので、ここで回答しています。リクエストに何が欠けているかはあまり明確ではありませんが、システムが実際に何を受け取っているかを確認するために、Web ログをチェック (または何らかのログ記録を設定) し続けます。問題の説明によると、リクエストに何らかの理由で「フリート」パラメーターがありません。ただし、リクエストでそのような値を分離して送信するのではなく、投稿本文のすべてのデータをシリアル化された JSON 文字列として送信します。したがって、gAjax に渡されたデータが正しくない/完全ではないか、サーバーで何か奇妙なことが起こっています。明らかに前者だと思いますが、とにかく、両端でログを記録してデバッグする必要があります。まず、次のようにします。

function gAjax(url, params, onSuccess, onError, onException, onComplete) {

    params['debug']=Object.toJSON(params);
    new Ajax.Request(url,
//....

これにより、JSON 文字列がリクエストに追加されるため、何が送信されているかを正確に確認できます。

お役に立てれば!

于 2012-12-14T11:43:29.143 に答える