Javascript 如何从类键中删除双引号以将事件填充到fullCalendar中

Javascript 如何从类键中删除双引号以将事件填充到fullCalendar中,javascript,asp.net,json,ajax,fullcalendar,Javascript,Asp.net,Json,Ajax,Fullcalendar,我想从sql中检索事件(名称、开始、结束),并将其显示在完整的日历中。 问题是检索到的列表在键周围包含“”。我想把它去掉 我尝试静态列表一次,在键的周围有一个“环绕”,一次没有。没有“”的正在工作 这是我的作品 function events() { return [{ id: 1, title: "event1", start: "2019-05-03", end: "2019-05-03" },

我想从sql中检索事件(名称、开始、结束),并将其显示在完整的日历中。 问题是检索到的列表在键周围包含“”。我想把它去掉

我尝试静态列表一次,在键的周围有一个“环绕”,一次没有。没有“”的正在工作

这是我的作品

function events() {
return [{
        id: 1,
        title: "event1",
        start: "2019-05-03",
        end: "2019-05-03"
        },
        {
            id: 2,
            title: "event2",
            start: "2019-05-10",
            end: "2019-05-10"
        },
    ];}
这是行不通的

function events() {
return [{
        "id": 1,
        "title": "event1",
        "start": "2019-05-03",
        "end": "2019-05-03"
        },
        {
            "id": 2,
            "title": "event2",
            "start": "2019-05-10",
            "end": "2019-05-10"
        },
    ];}
我希望它是动态的,所以我写道:

function events() {
$.ajax({
        type: "POST",
        url: "Calendar.aspx/GetData1",
        data: "",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success:
            function (response) {
                alert(response.d); //it alerts [{"id":1,"title":"TEST","start":"5/20/2019 12:00:00 AM","end":"5/20/2019 12:00:00 AM"}]
                return response.d;
            },
    });
}
aspx文件

$('#m_calendar').fullCalendar({
                header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'month,agendaWeek,agendaDay,listWeek'
                },
                editable: true,
                events: events(),
            });

因此,我需要从从ajax响应中检索的id、开始和结束键中删除“”。

据我所知,这与键周围的引号无关。有效的JSON必须在键周围有引号,这是规范的要求。(请注意,这不适用于JavaScript文本对象)

首先,您声称代码:

function events() {
  return [{
      "id": 1,
      "title": "event1",
      "start": "2019-05-03",
      "end": "2019-05-03"
    },
    {
      "id": 2,
      "title": "event2",
      "start": "2019-05-10",
      "end": "2019-05-10"
    },
  ];
}
工作不正常。我不知道你是怎么得出这个结论的。它工作得很好。这里有一个演示:。然而,由于这段代码实际上使用的是JS对象文字,而不是JSON(请确保你去谷歌搜索这两件事之间的区别!),因此这个例子实际上并不十分相关

然后,让事件函数调用AJAX来检索事件。这当然是一个好主意,但是你写的东西在概念上有一个关键问题

您必须记住AJAX调用是异步的。响应仅在回调函数中到达。该函数将在请求启动后的某个时间执行。jQuery的代码在从服务器接收响应时调用“success”回调函数。因此,从该代码返回一个值毫无意义-1)该值返回到调用函数的jQuery代码中的某个地方…该代码对事件数据不感兴趣。2) 即使这样做有效,实际的“events()”函数早就完成了执行——由于AJAX是异步的,它没有等到AJAX调用完成后才返回

幸运的是,为了解决这个问题,fullCalendar提供了一种机制,您可以在异步AJAX请求结束时将事件数据返回给它。这是通过向您提供模式来实现的,您可以通过该模式提供
事件:
以及对回调函数的引用(而不仅仅是函数的结果。每当日历需要检索事件时,包括首次加载日历时,都会执行此函数。fullCalendar然后向函数提供对另一个回调函数的引用,您可以在AJAX调用完成时调用该回调函数,并可以将事件数据传递给。当执行llback时,它会将数据添加到日历中

下面是一个如何实现此功能的示例:

$('#m_calendar').fullCalendar({
  header: {
    left: 'prev,next today',
    center: 'title',
    right: 'month,agendaWeek,agendaDay,listWeek'
  },
  editable: true,
  events: events, //note that without the () this is a _reference_ to the function, it does not execute the function immediately
});

function events(start, end, timezone, callback) { //parameters as shown in the documentation
  $.ajax({
    type: "POST",
    url: "Calendar.aspx/GetData1",
    dataType: "json",
    success: function (response) {
      callback(response.d); //run the provided callback function, to pass the events to fullCalendar
    },
  });
}
n.b.您还应该考虑修改C代码以接受回调所提供的“开始”和“结束”参数(当然,也相应地修改您的Ajax请求代码)。。然后,C#将只返回在指定的开始日期和结束日期之间发生的事件。这使代码更高效,因为它只返回实际将在日历上显示的数据,而不是返回添加到数据库中的所有事件。(如果用户将日历移动到未下载数据的新日期,fullCalendar将自动再次执行该功能,并从服务器获取新日期范围内的必要事件。)



另外,请阅读其中关于使用AJAX等异步代码的一些很好的一般信息。

您是否在问如何在javascript中解析json?为什么这个问题有c#和asp.net标记?…您知道
events()
不返回任何内容?…我建议您进行一些javascript基本培训为什么要使用c标记?您可以在c中使用:s=s.Replace(“\”,”);For js.mystring.Replace(/“/g,”);@bebolicous 1)来避免这种情况我真的希望OP不是通过任何类型的字符串连接来生成JSON,这将使您的建议成为可能,2)从键中删除引号将使JSON无效。OP说删除引号是一项要求是不正确的……他们的代码示例不起作用是不正确的(演示:)b)不相关,因为它使用的是JS对象文本,而不是jSON。@Selvin,因为列表是在c#中填写的,调用方在aspx页面中查看