2011-02-10 27 views
1

私はこのようにjQueryを使用してPageMethodを呼び出すしようとしています:以下のようにPageMethods、jQueryとJSON

[WebMethod] 
public stataic string WebMethod(PostData data) 
{ 
    //DO WORK 
    return "a"; 
} 

PostDataクラスは次のとおりです。

public class PostData 
{ 
    public string Guid{get;set;} 
    public string Action{get;set;} 
    public string Id{get;set;} 
} 

私はこのようにjQueryのメソッドを呼び出しています:

$.ajax({ 
    type="POST", 
    url: 'url', 
    data: JSON.stringify(b), 
    contentType: "application/json;charset=utf-8", 
    dataType: "json", 
    success: function (msg) { 
     var t = $(c).html(); 
     $(c).html(t + "<br/>" + $.evalJSON(msg.d)); 
    }, 
    error: function (x, y) { 
     var t = $(c).html(); 
     $(c).html(t + "<br/>" + $.evalJSON(x.responseText).Message); 
    } 
}); 

bは次のようである:{"PostData":{"Guid":"b61dce32-690b-4409-b51a-a6012462e54e","Action":"Testing","Id":"3"}}

私はこのエラーを取得しています:

Invalid web service call, missing value for parameter: 'data'. 

私はJSON.stringyfyを呼び出さない場合、私はこのエラーを取得する:

Invalid JSON primitive: PostData. 

私は{"Guid":"b61dce32-690b-4409-b51a-a6012462e54e","Action":"Testing","Id":"3"}もこれを試してみましたが、まだどちらか

取得しています
Invalid JSON primitive 'Guid' 

または

Invalid web service call, missing value for parameter: 'data'. 

私はJSON.stringifyを呼び出すかどうかによって異なります。

私も

[WebMethod] 
public static string WebMethod(string data) 
を試みたが、何のどこを持っていません。

答えて

2

JSONの最初のレイヤードオブジェクト名は、Webサービスの引数名と同じ名前にする必要があります。

{"data": {"Guid":"b61dce32-690b-4409-b51a-a6012462e54e","Action":"Testing","Id":"3"} } 
+0

うん、私は愚かな何かをしていることを知っていたが、それを釘付けすることができませんでした。ありがとう@ジェロネ。 – TheVillageIdiot

+0

ありがとう!どのくらい私がjquery.postに "500"というエラーが出ているのかを知るためにどれほどの時間を捜したかは分かりません。私はクライアントから送信していたJSONの中にWebMethod引数を指定する必要はないと考えました。 – dagilleland

0

は、あなたのデータの代わりに、JSON.stringify(b)のよう

 var params = {"PostData":{"Guid":"b61dce32-690b-4409-b51a-a6012462e54e","Action":"Testing","Id":"3"}}; 
     var yourdata = jQuery.param(params); 

パス

yourdata

これを試してみてください。

+0

nope @Furqan 'jQuery.param'は、コード化された文字列に変換します。私は実際にオブジェクト名として 'data:'が必要でした。 – TheVillageIdiot