2009-04-09 17 views
13

私は単純なWebメソッドとajax呼び出しを持ち、文字列をIDictionaryオブジェクトに変換できないというエラーを受け取りますか?ここでjQueryでWebMethodにパラメータを渡すAjax

は、AJAX呼び出しである:ここで

var params = '{"ID":"' + rowid + '"}'; 
$.ajax({ 
    url: 'EDI.asmx/GetPartnerDetails', 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    data: JSON.stringify(params), 
    dataType: "json", //not json . let me try to parse 
    success: function(msg, st) { . . . . 

はWebMethod属性である:ここでは

<WebMethod()> _ 
Public Function GetPartnerDetails(ByVal ID As String) As String 

    'Dim objParam As IDictionary = CType(JsonConvert.DeserializeObject(ID), IDictionary) 
    'Dim rowID As String = objParam("ID") 

    Dim objController As New HealthComp.BLL.X12Partners.TradingPartnersController 
    Dim objInfo As TradingPartnersInfo = objController.FetchByPartnerID(Int32.Parse(ID)) 

    Return JsonConvert.SerializeObject(objInfo) 
End Function 

は、私は放火犯から見たものである。

レスポンスヘッダ
サーバー:マイクロソフト、IIS /5.1
日付:2009年4月9日21:43:59 GMT
jsonerror:true
キャッシュ制御:専用
コンテンツタイプ:application/json; charset = UTF-8
のContent-Length:1331

POST: "{\" IDの\ ":\" 4 \ "}"

RESPONSE:

{ "メッセージ": "ことができません\ u0027System.String \ u0027のオブジェクトを\ u0027System.Collections .Generic.IDictionary`2 [System.String、System.Object] \ u0027 "、" StackTrace ":" System.Web.Script.Serializationに変換するには .ObjectConverter.ConvertObjectToTypeInternal(Object o、Type型、JavaScriptSerializerシリアライザ、Boolean throwOnError、Object & convertedObject)\ r \ n System.Web.Scri pt.Serialization.ObjectConverter.ConvertObjectToTypeMain (Object o、Type、JavaScriptSerializerシリアライザ、Boolean throwOnError、 )\ r \ n System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer シリアライザ、文字列入力、型の型、Int32 depthLimit)\ r \ n System.Web.Script.Serialization.JavaScriptSerializer .Deserialize [System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest]の[T](文字列入力)\ r \ n (HttpContextコンテキスト、JavaScriptSerializerシリアライザ)\ System \ WebService.RestHandlerで\ r \ n .GetRawParams(WebServiceMethodDataメソッドD ATA、のHttpContextコンテキスト)\ rを\ nはSystem.Web.Script.Services .RestHandler.ExecuteWebServiceCall(のHttpContextコンテキスト、WebServiceMethodData methodData)で」、 "ExceptionType" : "System.InvalidOperationExceptionが"}

誰もが任意のアイデアを持っていますこれについて?ありがとう!!

答えて

30

クイック項目:

あなたの変数のparams var params = '{ID:' + rowid + '}'; は文字列です。

したがって、行: data: JSON.stringify(params),は冗長(またはそれにする必要があります)です。 ちょうどdata: params,

あなたのウェブメソッドでは、結果をJSON文字列に変換して文字列として返します。 WebメソッドのクラスにScriptMethod属性がある場合、それを行う必要はありません。 データをネイティブタイプとして返​​し、Asp。NetはJSONへの変換を行います。

は、次の記事を読むかもしれない:上記に加えて http://elegantcode.com/2009/02/21/javascript-arrays-via-jquery-ajax-to-an-aspnet-webmethod/

http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/

+4

あなたは男です。クリスありがとう!私はこれを追加:var jsonText = JSON.stringify({ID:rowid});あなたの記事を読んだ後。私は引用符でパラメータを渡すことを示した1トンの記事を読んだ。あなたが読んだ最初のものはあなたのものであり、それを説明して固定しました。 Mucho gracias! –

+0

助けてくれてうれしいです。 –

1

、それはあなたが「文字列化」JSON配列回以上でないことを確認するためにチェックする価値があります。

すでにシリアル化されていた配列のJSON.stringify()を誤って呼び出すと、OPで受け取ったのと同様の問題が発生しました。

var arr = { id: elementID, name: Name }; 

編曲:変数の初期化を変更する

この場合

すなわち

var arr = JSON.stringify({ id: elementID, name: Name }); 
.... 
$.ajax({ 
... 
data: JSON.stringify(arr), 
... 
}); 

は、私の問題を解決しました。 :)

関連する問題