使用 php、ajax 和 jqplot 制作饼图


Using php, ajax and jqplot to make a pie chart

我正在尝试使用从MySQL获取信息的php文件制作饼图,JSON对其进行编码,然后将其发送到我的JS文件以制作饼图。我已经查看了此处发布的大多数其他问题,但没有一个对我有任何帮助。我试图重新调整我的代码以匹配似乎合适的代码,但没有任何效果。
我的 php 文件是:

$shelvDate = $_POST['shelvDate'];
$x = 0;
// get information from database for shelving chart
$shelv = $conn -> query ("SELECT sum(quantity) as qty, date_process, created_by, first_name from inventory LEFT JOIN users on users.user_id =inventory.created_by
    WHERE date_process = '$shelvDate' GROUP BY created_by" );
$num_rows = $shelv->num_rows;
if($num_rows > 0){
    while($row = $shelv->fetch_assoc()) {
        if($row['qty'] > 0){
            $qtyArray[$x] = $row['qty'];
            $nameArray[$x] = $row['first_name'];
        }
        $x++;
        $pairs = array('first_name' => $nameArray, 'qty' => $qtyArray);
    } // end of while statement
} //end of if statement
$conn->close();
echo json_encode(array($pairs));

当我尝试将数据放入ajax/js时,出现错误。我JS是:

$("#getRecords").live('click', function() {
    var ajaxDataRenderer = function(url, plot, options) {
        var ret = null;
        $.ajax({
            type: "POST",
            async: false,
            url: url,
            dataType:"json",
            data: ({shelvDate: $('#shelvDate').val()}),
            success: function(data) {
                for(var x=0; x<data.first_name.length; x++) {
                    var info = [data.first_name[x], data.qty[x]];
                    ret.push(info);
                }
        }); // end of ajax call
        return ret;
    }; // end of ajaxDataRenerer call
    // The url for our json data
    var jsonurl = "shelvChart.php";
    var plot2 = $.jqplot('shelvChart', jsonurl,{
    seriesDefaults: {
           // Make this a pie chart.
           renderer: jQuery.jqplot.PieRenderer,
           rendererOptions: {
               // Put data labels on the pie slices.
               // By default, labels show the percentage of the slice.
               showDataLabels: true
           }
        }, 
        title: "Books Shelved",
        dataRenderer: ajaxDataRenderer,
        dataRendererOptions: {
            unusedOptionalUrl: jsonurl
        }
    });
});

我不知道我做错了什么,甚至不知道从这里开始,因为我仍然是 AJAX 和 JS 的新手。任何帮助将不胜感激.
吉姆

看到您获得的真实JSON字符串将非常有用,因为我不确定在调用alert(ret)后如何获得name[object,object],qty[object,object],或者您指的是其他警报?

无论如何,从你所说的你的问题是你必须确保ajaxDataRenderer函数返回的数组是饼图接受的正确格式。

因此,例如,在PHPJavaScript代码中,您需要确保返回的数组ret具有以下格式:

ret = [[name[0], qty[0]], [name[1], qty[1]], ...]; 

这样,名称数组中的所有值都将用作标签,而 qty 数组将用作评估百分比的值。

此答案显示了如何为图表准备数据的类似方法。