2

私の WebMethod は次のようになります。

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json, UseHttpGet=true)]
public List<Person> HelloWorld(string hello)
{
   List<Person> persons = new List<Person> 
   {
      new Person("Sarfaraz", DateTime.Now),
      new Person("Nawaz", DateTime.Now),
      new Person("Manas", DateTime.Now)
   };
   return persons;
}

そして、jQueryを次のように使用してこのメ​​ソッドを呼び出そうとしています:

var params={hello:"sarfaraz"}; //params to be passed to the WebMethod
$.ajax
({
    type: "GET",   //have to use GET method
    cache: false,
    data: JSON.stringify(params),
    contentType: "application/json; charset=utf-8",
    dataType: 'json',
    url: "http://localhost:51519/CommentProviderService.asmx/HelloWorld",
    processData: true,
    success: onSuccess,
    error: onError      //it gets called!
});

しかし、うまくいきません。onSuccessコールバックを呼び出す代わりに、次のようonErrorに使用するものを呼び出しますalert

alert(response.status + " | " + response.statusText + " | " + response.responseText + " | " + response.responseXML );

これはこれを印刷します:

500 | 内部サーバー エラー | {"メッセージ":"無効な Web サービス呼び出し、パラメーターの値がありません: \u0027hello\u0027." ,"StackTrace":" System.Web.Script.Services.WebServiceMethodData.CallMethod (オブジェクト ターゲット、IDictionary 2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary2 パラメーター) で\r\n System.Web.Script.Services.RestHandler.InvokeMethod (HttpContext コンテキスト、WebServiceMethodData methodData、IDictionary) で`2 rawParams)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"} | 未定義

このエラーが発生する理由がわかりません。

POSTメソッドと makeを使用するように jQuery 呼び出しを変更するとUseHttpGet=false、うまく機能します。しかし、私はそれが動作するようにしたいGET. 何を修正する必要がありますか?

4

2 に答える 2

1

HTTP GET は、パラメーターがすべて URL でエンコードされることを想定しています。

問題は、ペイロードでJSON.stringifyを実行していることです。jQuery.ajaxは、一連のクエリ文字列パラメーターに変換できる単純な辞書を探しているだけです。

したがって、次のようなオブジェクトがある場合:

{ name: "value" }

jQuery は、次のように URL の末尾に追加します。

?name=value

Firebug、Chrome 開発者ツール、または IE 開発者ツールを使用して発信 URL を検査すると、ASP.Net が変換できない形式であることがわかると思います。

于 2012-09-29T13:43:18.820 に答える
0

GET で $.ajax リクエストを作成するには、データを次のように設定する必要があります。params="hello=sarfaraz"

したがって、完全なコード スニペットは次のようになります。

var params="hello=sarfaraz"; //params to be passed to the WebMethod
$.ajax
({
    type: "GET",   //have to use GET method
    cache: false,
    data: params,
    dataType: 'json',
    url: "http://localhost:51519/CommentProviderService.asmx/HelloWorld",
    success: onSuccess,
    error: onError    //it gets called!
});

それが役立つことを願っています!

于 2014-03-13T04:05:54.183 に答える