0

我有一个荒谬的问题,但即使潜伏了一整天,我也无法解决它。

我有一个Fullcalendar安装,我正在尝试从文件(events.php)中检索事件数据;我通过PHPMySql 表中加载数据。

问题:

如果我通过 PHP 自动生成提要,事件将不会显示在我的日历中。

如果我在我的文件中写下EXACT Json 行,它确实可以正常工作

例子:

这是我的events.php

<?php session_start();  

header("Content-Type: application/json");

//if (!isset($id_azienda)) die();

$id_azienda = $_GET['id_azienda'];

// Includo la classe
require_once("./db.class.php");

// Creo l'oggetto database
$db = new DataBase();

// Apro la connessione al database e ne memorizzo il risultato in $open
$open = $db->OpenConnection(); 

$eventiQuery = "SELECT * FROM scadenzario WHERE id_azienda ='$id_azienda'";

// Eseguo la query e ne memorizzo il risultato in $result
$eventiList = $db->Query($eventiQuery);

$numEventi = $db->NumRows($eventiQuery);

// Chiudo la connessione al database e ne memorizzo il risultato in $close
$close = $db->CloseConnection();

/* ************* FINE CARICAMENTO DATI DAL DATABASE ***************** */


while ($record = mysql_fetch_array($eventiList)) {
    $event_array[] = array(
        'id' => $record['id_scadenzario'],
        'title' => $record['titolo'],
        'start' => $record['data_inizio'],
        'url' => $record['url']
    );
}

echo json_encode($event_array);
?>

这将产生:

[{"id":"0","title":"test titolo","start":"2012-09-11","url":"http:\\\/\\\/yahoo.com\\\/"},{"id":"1","title":"test titolo","start":"2012-09-11","url":"http:\\\/\\\/google.com\\\/"}]

它不会显示任何东西。

但是,如果我将其复制并粘贴到文件“ events.php ”中并注释 echo 行:

// echo json_encode($event_array);
?>
[{"id":"0","title":"test titolo","start":"2012-09-11","url":"http:\\\/\\\/yahoo.com\\\/"},{"id":"1","title":"test titolo","start":"2012-09-11","url":"http:\\\/\\\/google.com\\\/"}]

它确实有效。

编辑:我的全日历实现是:

var scadenzario = $('#scadenzario-calendario').fullCalendar({

    events: "./events.php",

    header: {

        left: 'prev,next today',
        center: 'title',
        right: 'month,agendaWeek,agendaDay'

    },

    selectable: true,
        selectHelper: true,
        select: function(start, end, allDay) {
            var title = prompt('Nome dell\'evento:');
            if (title) {
                scadenzario.fullCalendar('renderEvent',
                    {
                        title: title,
                        start: start,
                        end: end,
                        allDay: allDay
                    },
                    true // make the event "stick"
                );
            }
            scadenzario.fullCalendar('unselect');
        },
        //editable: true,

    theme: true,

    buttonText: {

        today:    'Oggi',
        month:    'Mese',
        week:     'Settimana',
        day:      'Giorno'
    },

    monthNames: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],

    monthNamesShort: ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'],

    dayNames: ['Domenica', 'Lunedi', 'Martedi', 'Mercoledi', 'Giovedi', 'Venerdi', 'Sabato'],

    dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab']

});

恕我直言,这有点愚蠢。

笔记:

  • 我读到,当我尝试仅解析一个事件时,方括号可能会出现问题:这不是我的情况,我正在尝试使用两个事件;
  • 我首先想到的是字符编码,但我尝试过 text/plain 和 application/json,都没有运气;
  • url 中多余的斜线是由于过去几年缺乏 Gn'R 低俗硬摇滚风格。大声笑 XD(我的意思是:这不是重点)
  • 更新:我还尝试使用 fwrite 创建一个 txt 并将 json 字符串写入文件。没运气。完成工作的唯一方法似乎是手动将代码写入文件。好吧,我可能会认为这是一份工作机会,也许。哈哈。

有任何想法吗?先感谢您 :)

Ps:对不起,代码中的意大利注释和变量,但这不是重点;)

4

2 回答 2

0

尝试在您的 php 脚本顶部添加

header("content-type: application/json"); 

我认为问题是缺少标头声明,在某些网络服务器上可能会导致不同的解释。还尝试将 php 文件的格式(当然是用于将事件提供给日历的脚本)更改为 utf-8 字符集(我使用 notepad++ 作为编辑器 -> 格式 -> utf-8 编码格式)

手指交叉

于 2012-09-18T07:51:11.367 回答
0

我认为这是一个json_encode问题。它在最近的 php 版本 5.3 和 5.4 上进行了更改或更新。你在哪个版本上运行?试着找出你的$event_array. 我还会尝试的一件事是对数据库中的所有值进行utf8_encode。如果没有 firebug 或 wireshark 调试,真的帮不了你。

while ($record = mysql_fetch_array($eventiList)) {
  $event_array[] = array(
    'id' => utf8_encode($record['id_scadenzario']),
    'title' => utf8_encode($record['titolo']),
    'start' => utf8_encode($record['data_inizio']),
    'url' => utf8_encode($record['url']));
}

编辑:哈哈,这不应该起作用。$event_array是一个只存在于while函数中的变量。所以在全局范围内定义它!

于 2012-09-15T11:36:37.317 回答