0

私はばかげた問題を抱えていますが、丸一日潜んでいても解決できません。

Fullcalendarインストールがあり、ファイル ( events.php )からイベント データを取得しようとしています。MySql テーブルからPhp経由でデータをロードします。

問題:

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 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']

});

それはちょっとばかげています、私見。

ノート:

  • 1 つのイベントだけを解析しようとすると、角括弧で問題が発生する可能性があることを読みました。それは私の状況ではありません。2 つのイベントで試しています。
  • 最初に文字エンコーディングについて考えましたが、text/plain と application/json を試しましたが、どちらもうまくいきませんでした。
  • URL にスラッシュが多すぎるのは、ここ数年で Gn'R のスリーズ ハード ロック スタイルがなくなったためです。笑XD(つまり、それは重要ではありません)
  • 更新: fwrite で txt を作成し、json 文字列をファイルに書き込もうとしました。運がない。作業を完了する唯一の方法は、コードを手動でファイルに書き込むようです。まあ、私はそれを仕事のオファーと見なすかもしれません。笑。

何か案は?前もって感謝します :)

Ps: コード内のイタリア語のコメントと変数については申し訳ありませんが、それは問題ではありません ;)

4

2 に答える 2

0

PHPスクリプトの先頭に追加してみてください

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

問題は、一部の Web サーバーで異なる解釈を引き起こす可能性のあるヘッダー宣言の欠落だと思います。また、php ファイルの形式 (もちろんカレンダーにイベントを提供するために使用するスクリプト) を utf-8 文字セットに変更してみてください (エディターとして notepad++ を使用します -> 形式 -> utf-8 エンコード形式)

指をクロス

于 2012-09-18T07:51:11.367 に答える
0

json_encodeの問題だと思います。最近のphpバージョン5.3および5.4で変更または更新されました。どのバージョンで実行していますか? に含まれる値を把握してみてください$event_array。私が試みることの 1 つは、データベースからのすべての値を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_arraywhile関数にのみ存在する変数です。したがって、グローバルスコープで定義してください!

于 2012-09-15T11:36:37.317 に答える