2011-10-17 14 views
1

データを送信するためにjQueryのAJAXポストのフォーマット:WCFサービスに私は私のサービス契約で

[OperationContract(Name = "TreeViewData")] 
[WebInvoke(Method = "POST", 
BodyStyle = WebMessageBodyStyle.WrappedRequest, 
RequestFormat = WebMessageFormat.Json, 
ResponseFormat = WebMessageFormat.Json)] 
TreeData[] TreeViewData(string RagId); 

をツリーデータクラスは、単純な

public interface ITreeDataV1 
{ 
    string Id { get; set; } 
    string ParentId { get; set; } 
    string Text { get; set; } 
    string Value { get; set; } 
} 

[DataContract(Name = "TreeData", 
Namespace = "http://xxx.com/2011/10/14/TreeDataV1")] 
public class TreeData : ITreeDataV1 
{ 
    [DataMember(Name = "Id")] 
    public string Id { get; set; } 

    [DataMember(Name = "ParentId")] 
    public string ParentId { get; set; } 

    [DataMember(Name = "Text")] 
    public string Text { get; set; } 

    [DataMember(Name = "Value")] 
    public string Value { get; set; } 
} 

ですそして、私のサービスロジック自体に私が持っています:

public TreeData[] TreeViewData(string RagId) 
{ 
// some code and return some array of TreeData   
} 

私はjqueryの$のアヤックスの要求を作成するときに私の問題があるとして:

$.ajax(
{ 
type: "POST", 
url: "http://xxx/Retriever.svc/UI/TreeViewData", 
data: {"RagId":"121"}, 
dataType: "json", 
success: function() 
    { 
     alert('pop the champagne'); 
    } 
} 
); 

は、私は次の例外を取得 -

着信メッセージが予期しないメッセージ・フォーマット「生」を持っています。 の操作に必要なメッセージ形式は、 'Xml'、 'Json'です。これは のWebContentTypeMapperが バインディングで構成されていないためです。

私はほぼ間違いがありますが、リクエストのデータビットをどのようにフォーマットしたかが間違っています。

任意のポインタ?

答えて

2

データオブジェクト全体をストリング化する必要があります。これを簡単に行うには、JSON2ライブラリでJSON.Stringifyメソッドを使用する方法があります。 (https://github.com/douglascrockford/JSON-js/blob/master/json2.js

に変更します、それを使用する:

<script src="JSON2.js" type="text/javascript"></script> 
<script> 
    var myObj = {"RagId":"121"}; 
    var jsondata = JSON.stringify(myObj); 
    $.ajax({ 
     type: "POST",  
     url: "http://xxx/Retriever.svc/UI/TreeViewData",  
     data: jsondata, 
     dataType: "json", 
     success: function() 
     { 
      alert('pop the champagne'); 
     } 
    }); 
</script> 

はようになり、手動でそれをやって:

var data = '{"RagID":"121"}'; 

手動でしようとしたときしかし、このアプローチは、柔軟性がなく、時間の無駄になります複雑な/動的なオブジェクトを文字列化する

2

JQueryのajaxリクエストでcontentTypeを設定しようとしましたか?

contentType: "application/json; charset=utf-8" 
関連する問題