我正在尝试创建一个不需要回发并与服务器通信以获取复杂对象的动态网页。我开始创建一个启用 AJAX 的 WCF 服务,然后编写一些 jquery 来与该服务对话。我按照本教程http://www.codeproject.com/Articles/132809/Calling-WCF-Services-using-jQuery得到了它。
然后我意识到我可以单独使用 MVC 来执行此操作,将 JsonResult 类型作为控制器上的操作,遵循本教程: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 中的数组信息?
谢谢!