我正在尝试从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中调试,我不知道为什么没有返回数据。
任何人都可以想到任何可能有助于我解决这个问题的事情吗?谢谢。
解决方案:在我看了每个人的评论后,我意识到这一行是错误的:
var schedules = (eval(result.d));
这是我的成功逻辑的一部分,我没有在帖子中包含。在FireBug结果显示数据,但.d为空。这在Web应用程序中运行得很好,但它不喜欢MVC应用程序中的.d。我将代码更改为此,现在工作正常。我仍然不知道为什么该函数被击中两次,第一个错误输出但第二个检索数据。我会更多地研究它。
var schedules = (eval(result));
答案 0 :(得分:1)
我建议使用ajax方法的错误回调属性的所有参数:xhr,textStatus和errorThrown,并检查它们以查看实际错误是什么。请注意,xhr对象具有可以输出的属性(即,它是一个对象,这就是你得到它的原因),但textStatus可能提供更多信息。
$.ajax({
...
error: function(xhr,textStatus,errorThrown) {
alert("Error - " + textStatus );
}
});
答案 1 :(得分:0)
继tvanfossen所说的话。尝试在http://jsonformatter.curiousconcept.com/中验证你的Json但是,如果它不能序列化为JSON,我希望MVC框架抛出一个错误。