如何在没有URL的情况下使用JSON编码数组?

时间:2011-06-05 01:03:43

标签: mysql json events fullcalendar

您好我正在使用fullCalendar 1.5.1,我创建了一个PHP查询,几乎可以返回我想在日历中使用的所有内容。这是一个集成系统,所以我不得不切换到_ASSOC才能返回一个MySQLi联合数组:

<?php 
global $json_result;
global $myqueryresult;
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_ASSOC;
$myquery = "SELECT id, title, eventstart, eventend FROM View1";
$myqueryresult = $GLOBALS["conn"]->GetAll($myquery);
$json_result = json_encode($myqueryresult);
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_BOTH;
?>

...除了它不接受数据,因为键/值对中的键被引用(根据JSON标准,所以我读过)。

如果我只输入结果MySQL数组,Javascript只会将数据显示为“数组”。如果我在数组上使用json_encode(),我得到的东西看起来是一个合适的JSON对象,但由于引用了键,它不能用于fullCalendar。

这是我的jQuery for fullcalendar:

$(document).ready(function() {                            
    $('#calendar').fullCalendar({          
    height: 600,
    firstDay: 6,
    theme: true,
    year: 2012,
    month: 0,                      
    date: 7,                      
    minTime: 6,
    maxTime: 23,
    startParam: 'eventstart',
    endParam: 'eventend',
    defaultView: 'agendaWeek',        
    allDaySlot: false,
    slotMinutes: 15,                      
    events: <?php echo $json_result; ?>

        // put your options and callbacks here
    })
}); 

如果我将$ MySQL数组用于$ json_result:

,这是生成的HTML源代码
    $(document).ready(function() {                            
        $('#calendar').fullCalendar({          
<...snip...>
        slotMinutes: 15,                      
        events: Array
            // put your options and callbacks here
        })
    });

如果我使用json_encode($ thesamearray)

,结果如下
    $(document).ready(function() {                            
<...snip...>                    
        events: [{"id":"51","title":"Ship in Miami, Florida","eventstart":"2012-01-07 07:00:00","eventend":"2012-01-07 15:00:00"},{"id":"547","title":"Miami, Florida","eventstart":"2012-01-14 07:00:00","eventend":null}]
            // put your options and callbacks here
        })
    });

如何调整此值以使其在fullCalendar中作为数组运行?它似乎不想采用JSON字符串或数组,至少在数组现在来自PHP的格式中。

谢谢, 克里斯

SOLUTION:

别名MySQL字段:

<?php 
global $json_result;
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_ASSOC;
$myquery = "SELECT id, title, eventstart AS start, eventend AS end FROM View1";
$myqueryresult = $GLOBALS["conn"]->GetAll($myquery);
$json_result = json_encode($myqueryresult);
$GLOBALS["ADODB_FETCH_MODE"] = ADODB_FETCH_BOTH;
?>

还调整了jQuery以删除我的start / endparams并将allDaySlot更改为allDayDefault:

$(document).ready(function() {                            
    $('#calendar').fullCalendar({          
    height: 600,
    firstDay: 6,
    theme: true,
    year: 2012,
    month: 0,                      
    date: 7,                      
    minTime: 6,
    maxTime: 23,
    defaultView: 'agendaWeek',        
    allDayDefault: false,
    slotMinutes: 15,                      
    events: <?php echo $json_result; ?>

        // put your options and callbacks here
    })
});

现在,如果我只能找到一种方法让它显示为期8天的横向议程,我的麻烦可能已经结束了!谢谢大家的提示。

2 个答案:

答案 0 :(得分:1)

根据Event Object的文档,开始日期是必需的,必须指定为名为start的属性 - 您使用的名称为eventstart

请注意,根据文档,startParamendParam是事件的JSON Feed选项的参数,似乎不会更改用于开始和结束时间的属性的名称


更新1

除非您将allDay: false指定为事件的属性,否则我会对此进行一些操作,有点违反直觉,即使具有特定的时间范围,它也会显示在顶部的全天位置已使用allDaySlot: false禁用的日历。这是a working example使用几乎所有原始设置。


更新2

从您对Matt的回答和文档的评论中,我看到allDay属性的全局默认值继承自allDayDefault属性,默认为true。因此,通过将选项中的allDayDefult: false传递给fullCalendar(),您可以避免为每个事件单独指定allDay: false。这是updated fiddle.。请注意,您不必删除allDaySlot,它只是指示显示全天事件的插槽是否显示在顶部。

答案 1 :(得分:0)

<?
$username = "root";
$password = "";
$hostname = "localhost"; 
$dbhandle = mysql_connect($hostname, $username, $password)
  or die("Unable to connect to MySQL");
  $selected = mysql_select_db("db_name",$dbhandle)
  or die("Could not select examples");
  $sql = 'SELECT * from schedule';
  $result = mysql_query($sql);
   $events = array();
while ($row = mysql_fetch_assoc($result)) {
    $eventsArray = array();
    $eventsArray['id'] =  $row['idschedule'];
    $eventsArray['title'] = $row['schedule_name'];
    $eventsArray['start'] = $row['date_start']. " " . $row['time_start'];
    $eventsArray['end'] = $row['date_end']. " ".$row['time_end'];

   if($all==true)
    {
        $vall = str_replace('}',',"allDay":true}',json_encode($eventsArray));
    }
    else
    {
        $vall = str_replace('}',',"allDay":false}',json_encode($eventsArray));
    }
    $events[] = trim($vall); 
}  
$val = implode($events);
$val2 = str_replace('}','},',$val);

?>

然后在像这样的事件中传递这个

events: [<?=$val2?>],

它会起作用。