jQuery JSON to Javascript


jQuery JSON to Javascript

我正在修改jQuery日历,并希望更改以下代码:

function getEventData() {
  var year = new Date().getFullYear();
  var month = new Date().getMonth();
  var day = new Date().getDate();
  return {
     events : [
        {
           "id":1,
           "start": new Date(year, month, day, 12),
           "end": new Date(year, month, day, 13, 30),
           "title":"Lunch with Mike"
        },
        {
           "id":2,
           "start": new Date(year, month, day, 14),
           "end": new Date(year, month, day, 14, 45),
           "title":"Dev Meeting"
        },
        {
           "id":3,
           "start": new Date(year, month, day + 1, 17),
           "end": new Date(year, month, day + 1, 17, 45),
           "title":"Hair cut"
        },
        {
           "id":4,
           "start": new Date(year, month, day - 1, 8),
           "end": new Date(year, month, day - 1, 9, 30),
           "title":"Team breakfast"
        },
        {
           "id":5,
           "start": new Date(year, month, day + 1, 14),
           "end": new Date(year, month, day + 1, 15),
           "title":"Product showcase"
        },
        {
           "id":6,
           "start": new Date(year, month, day, 10),
           "end": new Date(year, month, day, 11),
           "title":"I'm read-only",
           readOnly : true
        },
        {
           "id":7,
           "start": new Date(year, month, day + 2, 17),
           "end": new Date(year, month, day + 3, 9),
           "title":"Multiday"
        }
     ]
  };
}

我想从PHP页面中的数据库中提取JSON数据。所以我必须看起来像:

   function getEventData() {
  $.getJSON('../ajax/calendar.php?type=get', function(data) {
        return data;
    });
     }

但我收到一个错误,上面写着"Uncaught TypeError:无法读取未定义的属性‘options’",这与这里的数据呈现有关:

_renderEvents: function(data, $weekDayColumns) {
      var self = this;
      var options = this.options;
      var eventsToRender;
      if (data.options) {
        var updateLayout = false;
        //update options
        $.each(data.options, function(key, value) {
            if (value !== options[key]) {
              options[key] = value;
              updateLayout = updateLayout || $.ui.weekCalendar.updateLayoutOptions[key];
            }
        });

返回的JSON:

 [{"id":"1","start":"Wed Jan 25 2012 11:30:00 GMT-0800 (PST)","end":"Wed Jan 25 2012 11:45:00 GMT-0800 (PST)","title":"test"}]

在PHP页面上进行了测试,JSON显示正常。有什么建议吗?

我假设_renderEvents: function(data, $weekDayColumns) {中的data是您使用getEventData()方法检索的数据,然后将其存储在那里。在这种情况下,您需要等待data实际拥有从ajax返回的内容。

在ajax完成之前,不能执行代码块_renderEvents: function(data, $weekDayColumns) {。您可以将它封装在一个函数中,并在DataDone()上调用它,然后在getJSON回调中调用该函数。

var data = '';
function getEventData() {
    $.getJSON('../ajax/calendar.php?type=get', function(result) {
       data = result;
       onDataDone();
    });
}
function onDataDone() {
    // code that wraps the _renderEvents: function(data, $weekDayColumns) {...
}
getEventData();

$.getJSON异步运行,因此返回直到稍后才会执行。您可以同步运行ajax请求,也可以添加在ajax请求完成时调用的回调。