我正在尝试使用AJAX从我的控制器获取数据以放入jQuery FullCalendar, 既然我对我的控制器相当自信,我仍然会收到错误说:
位于0位置的json中的意外标记U
所以必须有一些错误。
这里是我用来从我的数据库中获取数据的脚本:
[HttpPost, ActionName("List")]
[WebMethod(EnableSession = true)]
public ActionResult List()
{
temphrmEntities db = new temphrmEntities();
List<medewerker_melding> eventList = db.medewerker_melding.ToList();
// Select events and return datetime as sortable XML Schema style.
var events = from ev in eventList
select new
{
id = ev.ID,
title = ev.medewerker.voorvoegsel + ". " + ev.medewerker.achternaam,
desc = ev.Omschrijving,
start = ev.datum_van.ToString(),
end = ev.datum_tot.ToString(),
user = ev.medewerkerID,
melding = ev.meldingID
};
// Serialize to JSON string.
JavaScriptSerializer jss = new JavaScriptSerializer();
String json = jss.Serialize(events);
Debug.WriteLine("Json:"+json);
return Json(json, JsonRequestBehavior.AllowGet);
}
这是它返回的Json格式:
[
{
"id":1,
"title":"K. Keesen",
"desc":"zelf ziek gemeld",
"start":"2-2-2018 13:00:00",
"end":"5-2-2018 13:00:00",
"user":15,
"melding":1
},
{
"id":3,
"title":"K. Keesen",
"desc":null,
"start":"2-2-2018 13:00:00",
"end":"5-2-2019 13:00:00",
"user":15,
"melding":1
},
{
"id":5,
"title":"K. Keesen",
"desc":null,
"start":"14-2-2018 08:30:00",
"end":"",
"user":15,
"melding":1
},
{
"id":6,
"title":"K. Keesen",
"desc":"srgsrgrgdrgdrgd",
"start":"7-2-2018 08:30:00",
"end":"",
"user":38,
"melding":13
},
{
"id":7,
"title":"T. test",
"desc":null,
"start":"14-2-2018 08:30:00",
"end":"21-2-2018 17:00:00",
"user":63,
"melding":10
},
{
"id":8,
"title":"K. Keesen",
"desc":null,
"start":"16-2-2018 08:30:00",
"end":"23-2-2018 17:00:00",
"user":28,
"melding":14
},
{
"id":9,
"title":"K. Keesen",
"desc":null,
"start":"14-2-2018 08:30:00",
"end":"",
"user":33,
"melding":12
},
{
"id":10,
"title":"K. Keesen",
"desc":"fvghbj",
"start":"22-2-2018 08:30:00",
"end":"",
"user":15,
"melding":11
},
{
"id":11,
"title":"K. Keesen",
"desc":null,
"start":"15-2-2018 08:30:00",
"end":"22-2-2018 17:00:00",
"user":15,
"melding":1
},
{
"id":12,
"title":"K. Keesen",
"desc":null,
"start":"23-2-2018 08:30:00",
"end":"",
"user":15,
"melding":1
},
{
"id":13,
"title":"K. Keesen",
"desc":"Test take #25",
"start":"7-2-2018 08:30:00",
"end":"23-2-2018 17:00:00",
"user":15,
"melding":1
},
{
"id":14,
"title":"K. Keesen",
"desc":null,
"start":"8-2-2018 08:30:00",
"end":"",
"user":15,
"melding":1
}
]
我使用Json Formatter & Validation
检查了它是否有效最后我的功能是ajax :(我不太擅长ajax,所以复制粘贴它)
function GenerateCalendar() {
$("#calendar").fullCalendar({
theme: true,
header: {
left: "prev,next today",
center: "title",
right: "month,agendaWeek,agendaDay"
},
defaultView: 'month',
selectable: true,
selectHelper: true,
editable: true,
eventLimit: true,
events: function (start, end, callback) {
$.ajax({
type: "POST", //WebMethods will not allow GET
url: '@Url.Action("List/medewerker_melding")', //url of a webmethod - example below
//data: "", //this is what I use to pass who's calendar it is
//completely take out 'data:' line if you don't want to pass to webmethod - Important to also change webmethod to not accept any parameters
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (doc) {
var events = []; //javascript event object created here
var obj = $.parseJSON(doc.d); //.net returns json wrapped in "d"
$(obj.event).each(function () { //yours is obj.calevent
events.push({
title: $(this).attr('title'), //your calevent object has identical parameters 'title', 'start', ect, so this will work
start: $(this).attr('start'), // will be parsed into DateTime object
end: $(this).attr('end')
});
});
callback(events);
}
});
},
select: function (start, end) {
var start = moment(start).format();
var end = moment(end).format();
$('#startDate').val(start);
$('#endDate').val(end);
$('#eventModal').modal();
if ($('#eventModal')) {
$(".meldingForm").submit(function () {
//insertEvents();
});
$('#calendar').fullCalendar('renderEvent', events, true);
}
$('#calendar').fullCalendar('unselect');
},
});
}
谢谢!
答案 0 :(得分:0)
你说你已经复制了AJAX,仔细检查其中的一行:
var obj = $.parseJSON(doc.d); //.net returns json wrapped in "d"
并检查JSON是否作为变量d
从服务器存储在返回对象中。
尝试在该行之前插入console.log(doc)
并检查您的浏览器是否会检查服务器实际返回的内容。
<强>更新强>
将var obj = $.parseJSON(doc.d);
替换为var obj = doc
,因为ajax方法会自动解析。
答案 1 :(得分:0)
您不需要这一行:
var obj = $.parseJSON(doc.d);
当你告诉jQuery期望的数据类型是json(dataType: "json"
)时,它会尝试为你自动解析它,如果它不是一个有效的JSON对象则会失败(有关更多信息,请参阅jQuery.getJSON()详情)。
请改为尝试:
var obj = doc.d;
<强>更新强>
确实, d
未定义。尝试将代码更改为:
var events = []; //javascript event object created here
$.each( doc, function( index, obj ) {
events.push({
title: obj.title,
start: obj.start,
end: obj.end
});
});
callback(events);