JSON, PHP, FLOT и JQUERY - PullRequest
       22

JSON, PHP, FLOT и JQUERY

2 голосов
/ 31 июля 2011

В основном я пишу сценарий отчета, в котором он извлекает данные из базы данных, и я хочу проанализировать его в Graph с использованием JSON, jQuery и FLOT.

Я получил данные в JSON и графикнаполовину генерируется, но не заполняется правильными данными (или какими-либо данными по этому вопросу).

Вот код jQuery:

$(document).ready(function(){
var options = {
    legend: {
        show: false,
        margin: 10,
        backgroundOpacity: 0.5
    },
    points: {
        show: true,
        radius: 3
    },
    lines: {
        show: true
    }
};  

var plotarea = $("#plotarea");
plotarea.css("height", "250px");
plotarea.css("width", "500px");

$('button[name="getJSON"]').click(function(){
    $.ajax({
        url: 'reports.php?r=1', 
        dataType: 'json', 
        success: function(data){
            $.plot( plotarea , data, options );
        }
    });
});

});

Вот код PHP, который, насколько я знаю, работает правильно:

$r = addslashes($_GET['r']);

            if(!$r){
                die('Incorrect Value for \'r\' was set');
            }                      

            $sqlQuery = mysql_query(sprintf(
                "SELECT DATE_FORMAT(FROM_UNIXTIME(`date_registration`), '%%d-%%m-%%Y') AS `date`, COUNT(1) AS `count`
                FROM `crowdcube_users`
                WHERE `date_registration` BETWEEN %d AND %d
                GROUP BY `date`",
                $startDate,
                $endDate
            ));



            while($row = mysql_fetch_assoc($sqlQuery)){                                   
                $newData[] = array(
                    'label' => $row['date'],
                    'data'  => array(
                                    $row['date'] => $row['count']
                                )
                    );
            }

            //Encode the array into JSON data
            echo json_encode($newData);

Вот массив JSON:

[{"label":"25-07-2011","data":{"25-07-2011":"27"}},{"label":"26-07-2011","data":{"26-07-2011":"27"}},{"label":"27-07-2011","data":{"27-07-2011":"9"}},{"label":"28-07-2011","data":{"28-07-2011":"17"}},{"label":"29-07-2011","data":{"29-07-2011":"18"}},{"label":"30-07-2011","data":{"30-07-2011":"13"}},{"label":"31-07-2011","data":{"31-07-2011":"3"}}]

И, наконец, это то, что я получаю, когдаЯ генерирую график:

http://i.imgur.com/tTIqs.png

Что я делаю не так?Любая помощь будет принята с благодарностью!

Заранее спасибо!

1 Ответ

2 голосов
/ 31 июля 2011

прямо из Flot FAQ : проверьте ваши типы данных. Для JSON "27" - это не то же самое, что 27.

В: Flot не работает, когда я использую данные JSON в качестве источника!

A: На самом деле, Флот любит данные в формате JSON, вы просто неправильно указали формат. Дважды проверьте, что вы не вводите строки вместо цифр, как [["0", "-2.13"], ["5", "4.3"]]. Это самая распространенная ошибка, и ошибка может появиться не сразу, потому что Javascript может сделать некоторые преобразование автоматически.

Кроме того, ваша структура данных сильно отличается от того, что ожидает Flot. В частности, последовательность данных должна быть списком точек данных, каждый из которых является списком координат:

{data:[[0,-2.13],[5,4.3],.....]}

Что касается данных, основанных на времени, вы должны использовать метки времени Javascript, то есть количество миллисекунд с начала эпохи. В большинстве случаев это просто временная метка Unix, умноженная на 1000

...