ポストバックを必要とせず、サーバーと通信して複雑なオブジェクトを取得する動的なWebページを作成しようとしています。私はAJAX対応のWCFサービスの作成から始め、次にサービスと通信するためのjqueryを作成しました。このチュートリアルhttp://www.codeproject.com/Articles/132809/Calling-WCF-Services-using-jQueryに従って動作しました。
次に、次のチュートリアルに従って、コントローラーのアクションとしてJsonResultタイプを使用して、MVCを単独で使用できることに気付きました。http://geekswithblogs.net/michelotti/archive/2008/06/28/mvc-json- --jsonresult-and-jquery.aspx。
.cshtmlページをそのままにして、別のサービスをプラグインする(WCFからMVCに切り替える)と、JavaScriptがクラッシュし始めました(JSでresponse.lengthを評価しようとしたとき)。WebDevHelperツールを使用して、JSONファイルの応答コンテンツを調べ、重要な違いを見つけました。
MVC JsonResponseは私にこの結果を与えます:["anthony"]
AJAX対応のWCFサービスは私にこれを与えます:{"GetUserResult":["anthony"]}
WCFメソッドは次のようになります。
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
string[] GetUser(string Id)
{ return new string[] { "foo", "bar" }; }
MVCメソッドは次のようになります。
public JsonResult GetUser(string Id)
{ return Json(new string[] { "foo", "bar" }); }
GetUserは文字列の配列を返します(この場合、常に配列内の単一の項目を返します)。WCFサービスのメソッド名は「GetUser」と呼ばれますが、私が見ているものを完全には理解していません。 WCFがMVCとは異なるデータを提供する理由はわかりません。最後に、javascriptがresult.lengthを評価して正常に機能するのに、小さいMVCデータを使用すると長さプロパティが見つからないためにクラッシュするのはなぜですか。JSONがJsonResultに配列情報を含めていないようですか?
ありがとう!