【问题标题】:Return Json from MVC application从 MVC 应用程序返回 Json
【发布时间】:2011-12-06 13:23:17
【问题描述】:

我正在尝试从 MVC 应用程序返回 Json 数据。我使用 Fiddler 和 FireBug 来解决这个问题,Json 数据似乎没问题,但由于某种原因,数据仍然没有显示。这是我的代码:

public class CalendarController : Controller
{

public JsonResult ReturnCalendarEvents()
        {


            var model = _service.EventList("JackV", "10/1/2011", "10/8/2011");
            return Json(model, JsonRequestBehavior.AllowGet);


        }

}

Site.Master

 $.ajax({
          type: "POST",
          async: false,
          contentType: "application/json; charset=utf-8",
          url: "/Calendar/ReturnCalendarEvents",
          data: "{'UserName':'" + UserName + "','starTime':'" + start.format("isoDateTime") + "','endTime':'" + end.format("isoDateTime") + "'}",
          dataType: "json",
          success: function (result) {
            //Logic goes here
                },
                                error: function (e) { alert("An Error Occured" + e); }
                            });

因此,即使在 Fiddler 中我看到返回的实际 Json 数据,在 Site.Master 文件中,这也会直接导致错误。返回的错误是 [Object object]。不太有帮助。我调试了我的应用程序,在数据作为 Json 返回之前没有任何错误。除非数据不是真实的 Json,但它确实看起来像。

奇怪的是,ajax 函数运行,然后直接出错,然后我进入我的控制器的 Visual Studio 代码,然后它返回到这个 ajax 函数但这次它确实出错了,它转到成功代码。一路上的某个地方,它停止在 FireBug 中调试,我不确定为什么没有返回数据。

谁能想到任何可以帮助我解决这个问题的方法?谢谢。


解决办法:看了大家的cmets后才发现这条线是错的:

  var schedules = (eval(result.d));

这是我的成功逻辑的一部分,我没有包含在帖子中。在 FireBug 结果中显示数据,但 .d 为空。这在 Web 应用程序中工作得很好,但它不喜欢 MVC 应用程序中的 .d。我将代码更改为此,现在它工作正常。我仍然不知道为什么该函数被命中两次,第一个出错,但第二个检索数据。我会更多地研究它。

 var schedules = (eval(result));

【问题讨论】:

  • 服务器返回的 JSON 长什么样?我还可以问一下,为什么你将async 标志设置为false?此外,您似乎在向控制器操作的请求中发送了一些 JSON 数据,但您显示的操作似乎根本没有任何参数。另一个问题:如果用户名包含单引号怎么办?
  • 启动调试会话并在控制器操作上设置断点。很有帮助。

标签: asp.net-mvc json jquery


【解决方案1】:

我建议使用 ajax 方法的错误回调属性的所有参数:xhr、textStatus 和 errorThrown,并检查它们以查看实际错误是什么。请注意,xhr 对象具有您可以输出的属性(即,它是一个对象,这就是您得到它的原因),但 textStatus 可能提供更多信息。

 $.ajax({
     ...
     error: function(xhr,textStatus,errorThrown) {
                alert("Error - " + textStatus );
     }
 });

【讨论】:

  • 所以代码应该是这样的: function (e) { alert("An Error Occured" + e + e.event + e.statusText + e.errorThrown); }。我对javascript不太熟悉。谢谢。
  • @MikeB55 - 我已经更新了一个示例,并将添加一个指向 API 文档的链接 - 查找错误回调的规范。
  • 谢谢。我会试试看。
  • @MikeB55:不,只需将示例中的 error 函数签名更改为本文中的样子即可。
【解决方案2】:

进一步了解 tvanfossen 所说的内容。尝试在 http://jsonformatter.curiousconcept.com/ 中验证您的 Json 但是,如果 MVC 框架无法序列化为 JSON,我希望 MVC 框架会抛出错误。

【讨论】:

  • 是的,我使用了 Json 验证,它是有效的 Json。谢谢。至少我知道 Json 是有效的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
相关资源
最近更新 更多